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



我有一个像这样的关联多维数组:

[
    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,
)

相关内容

  • 没有找到相关文章

最新更新