php 将多维数组中所有空非数组元素的键复制到值

ntjbwcob  于 2023-01-29  发布在  PHP
关注(0)|答案(3)|浏览(119)

我有一个如下的关联多维数组:

[
    7 => [49 => null, 41 => null],
    8 => [70 => null, 69 => null],
    105 => null,
    9 => null,
    10 => null
]

现在,我需要处理每个键,但是我很难通过foreach()循环访问所有元素--因为没有值,我一直在尝试使用array_keys(),但是它不适合多维键。
有没有一种方法可以将键指定为值,从而得到这样的结构?

Array
(
    [7] => Array
        (
            [49] => 49
            [41] => 41
        )

    [8] => Array
        (
            [70] => 70
            [69] => 69
        )

    [105] => 105
    [9] => 9
    [10] => 10
)

这样,我就可以使用foreach()来获取每个键的值。

xxb16uws

xxb16uws1#

使用array_walk_recursive()将键作为值赋给其值不是数组的每个条目。

knpiaxh1

knpiaxh12#

在这种情况下我们可以使用array_walk_recursive,在array_walk_recursive的回调函数中,如果我们传递了元素引用,那么在回调函数中我们可以用key改变空值。

array_walk_recursive($arr, function(&$item, $key){
    if(!$item && $key) $item  = $key;
});

print_r($arr);
dced5bon

dced5bon3#

在PHP7.4中,你可以享受到"arrow function"语法的简洁。你仍然需要使leafnode的值可以通过引用修改,并手动将$k的值赋值给$v。arrow函数语法尝试(默认情况下)将表达式中的值赋值给return,但返回值被忽略。
代码:(Demo

$array = [
    7 => [49 => null, 41 => null],
    8 => [70 => null, 69 => null],
    105 => null,
    9 => null,
    10 => null
];

array_walk_recursive($array, fn(&$v, $k) => $v = $k);
var_export($array);

输出:

array (
  7 => 
  array (
    49 => 49,
    41 => 41,
  ),
  8 => 
  array (
    70 => 70,
    69 => 69,
  ),
  105 => 105,
  9 => 9,
  10 => 10,
)

相关问题