array_walk_recursive 与数组?

mis*_*t92 7 php arrays recursion

我有一个菜单数组,它是一个多维数组,我想对每个项目做一些事情,所以我尝试了 array_walk_recursive。这是菜单:

$menu = array(
    array(
        'name'=>'a',
        'url'=>'b',
    ),
    array(
        'name'=>'c',
        'url'=>'d',
        'children'=>array(
            array(
                'name'=>'e',
                'url'=>'f'
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

但 array_walk_recursive 只让我处理每个元素,而不是数组。

array_walk_recursive($menu, function(&$item){
    var_dump($item);//return a;b;c;d;e;f;g
});
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

array_walk_recursive_with_array($menu, function(&$item){
    var_dump($item);//return array('name'=>'a','url'=>'b');a;b;array('name'=>'c',...);c;d;...
    if(is_array($item) && isset($item['name'])){
        // I want to do something with the item.
    }
})
Run Code Online (Sandbox Code Playgroud)

有PHP原生函数实现吗?

art*_*gis 4

根据array_walk_recursive 文档,您无法获取内部数组键。满足您的需求的一种方法是使用 array_walk 并创建您自己的递归性。

function HandleArray(&$value){
    if(is_array($value)){
        //Do something with all array
        array_walk($value,'HandleArray');
    }
    else{
       //do something with your scalar value
    }
}
array_walk(array($your_array),'HandleArray');
Run Code Online (Sandbox Code Playgroud)

  • 正确的。根据 PHP 文档:“任何保存数组的键都不会传递给该函数。” 为什么会这样,我无法理解。对于名为“recursive”的函数来说似乎违反直觉。 (3认同)