在递归遍历多维数组时为值添加静态前缀

问题描述 投票:0回答:2

我有以下代码

$fruits = [
    'sweet' => 'sugar',
    'sour' => 'lemon',
    'myfruits' => [
        'a' => 'apple',
        'b' => 'banana'
    ]
];

function test_alter(&$item1, $key, $prefix){
    print $key;
    print "<br />";
    $item1 = "$key $prefix: $item1";
}


array_walk_recursive($fruits, 'test_alter', 'fruit');

当我执行它时,我得到了这个

sweet<br />sour<br />a<br />b<br />

但是预期的输出是

sweet<br />sour<br />myfruits<br />a<br />b<br />

那么我怎样才能在那里打印

myfruits

php recursion multidimensional-array key
2个回答
2
投票

你不能使用

array_walk_recursive
。您将需要使用普通的
array_walk
并自己提供递归:

function test_alter(&$item1, $key, $prefix) {
    print $key;
    print "<br />";
    if(is_array($item1)) {
        array_walk($item1, 'test_alter', $prefix);
    }
    else {
        $item1 = "$key $prefix: $item1";
    }
}

1
投票

无法使用 array_walk_recursive() 做到这一点。 文档

尝试这个递归函数。

$fruits = array('sweet' => 'sugar', 'sour' => 'lemon', 'myfruits' => array('a' => 'apple', 'b' => 'banana'));

function test_alter(&$item1, $key){
  print $key;
  print "<br />";
  // recursive
  if (is_array($item1)) array_walk ($item1, 'test_alter');
}
array_walk ($fruits, 'test_alter');
© www.soinside.com 2019 - 2024. All rights reserved.