我有以下代码
$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
?
你不能使用
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";
}
}
无法使用 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');