我有一个像这样的关联多维数组:
[
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()
来获取每个键的值。
使用array_walk_recursive()将键作为值赋给每个值不是数组的表项
在这种情况下可以使用array_walk_recursive。在array_walk_recursive的回调函数中,如果传递元素引用,则可以在回调函数中使用key更改空值。
array_walk_recursive($arr, function(&$item, $key){
if(!$item && $key) $item = $key;
});
print_r($arr);
从PHP7.4开始,您可以享受到"箭头函数"的简洁性。语法。您仍然需要使叶节点的值可以通过引用修改,并手动将$k
的值分配给$v
。箭头函数语法尝试(默认情况下)return
表达式中的值,但返回值被忽略。
代码(演示):
$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,
)