在PHP中从多维数组替换内部键
具有以下阵列:在PHP中从多维数组替换内部键,php,arrays,Php,Arrays,具有以下阵列: array(4) { [0]=> array(2) { [0]=> string(3) "233" [1]=> string(37) "some data" } [1]=> array(2) { [0]=> string(3) "233" [1]=> string(68) "some other data" } [2]=> array(2) {
array(4) {
[0]=>
array(2) {
[0]=>
string(3) "233"
[1]=>
string(37) "some data"
}
[1]=>
array(2) {
[0]=>
string(3) "233"
[1]=>
string(68) "some other data"
}
[2]=>
array(2) {
[0]=>
string(3) "144"
[1]=>
string(38) "some other data"
}
[3]=>
array(2) {
[0]=>
string(3) "233"
[1]=>
string(42) "some other data"
}
}
我想用一些随机的十六进制颜色替换值233
和144
(内部数组中的键0
)。例如,具有相同键(233
)的键必须具有相同的十六进制颜色(FFF000
,例如在上述所需解决方案中)
这是我用来生成随机十六进制颜色的函数:
function randHEXcolor() {
return sprintf('%06X', mt_rand(0, 0xFFFFFF));
}
我期望的输出应该是:
array(4) {
[0]=>
array(2) {
[0]=>
string(6) "FFF000"
[1]=>
string(37) "some data"
}
[1]=>
array(2) {
[0]=>
string(6) "FFF000"
[1]=>
string(68) "some other data"
}
[2]=>
array(2) {
[0]=>
string(6) "111333"
[1]=>
string(38) "some other data"
}
[3]=>
array(2) {
[0]=>
string(6) "FFF000"
[1]=>
string(42) "some other data"
}
}
我怎样才能归档这个
提前感谢。如果希望将所有值转换为相同的随机颜色,则必须保存这些颜色:
foreach ($array as &$item) {
if (!isset($temp[$item[0]]) {
$temp[$item[0]] = randHEXcolor();
}
$item[0] = $temp[$item[0]];
}
$colors_translation = array();
foreach ($array as &$item) {
$color = $item[ 0 ];
$translate = $colors_translation[ $color ];
if (empty($translate)) {
$colors_translations[ $color ] = $translate = randHEXcolor();
}
$item[ 0 ] = $translate;
}
尝试:
使用
in_array
和isset
功能的解决方案:
$keys = [];
foreach ($arr as &$v) { // $arr is your initial array
if (in_array($v[0], ['233', '144'])) {
if (!isset($keys[$v[0]])) $keys[$v[0]] = sprintf('%06X', mt_rand(0, 0xFFFFFF));
$v[0] = $keys[$v[0]];
}
}
print_r($arr);
输出:
Array
(
[0] => Array
(
[0] => 65A4BB
[1] => some data
)
[1] => Array
(
[0] => 65A4BB
[1] => some data
)
[2] => Array
(
[0] => DDB588
[1] => some data
)
[3] => Array
(
[0] => 65A4BB
[1] => some data
)
)
这段代码将在遍历数组时创建一个颜色映射。如果需要预定义的颜色转换,请预先填充
$colorMap
如果您这样做:foreach($arr as&$subar)
那么您将获得元素的“引用”,并且您可以更改循环中所需的值。向我们展示您尝试了什么,以及您遇到了什么错误(如果您可以在帖子上阅读的话),例如,具有相同键(233
)的元素必须具有相同的十六进制颜色(FFF000
例如在上面所需的解决方案中)。此解决方案为相同的键提供不同的十六进制颜色。我在$translate=$colors\u translation[$color];
行中得到未定义索引:233
。我不知道这是否是因为我使用的是PHP 5.2(我无法更新版本,因为它不是我自己的机器)在访问空元素后,不要使用if empty
。这不是您的PHP版本,而是关于显示通知的设置。@deceze是正确的-使用isset()
或array\u key\u exists()
检查该值是否存在
$keys = [];
foreach ($arr as &$v) { // $arr is your initial array
if (in_array($v[0], ['233', '144'])) {
if (!isset($keys[$v[0]])) $keys[$v[0]] = sprintf('%06X', mt_rand(0, 0xFFFFFF));
$v[0] = $keys[$v[0]];
}
}
print_r($arr);
Array
(
[0] => Array
(
[0] => 65A4BB
[1] => some data
)
[1] => Array
(
[0] => 65A4BB
[1] => some data
)
[2] => Array
(
[0] => DDB588
[1] => some data
)
[3] => Array
(
[0] => 65A4BB
[1] => some data
)
)