在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
        )
)