递归数组遍历以获取多级数组键

时间:2015-01-28 00:53:53

标签: php

我有以下代码

<?
$fruits = array('sweet' => 'sugar', 'sour' => 'lemon', 'myfruits' => array('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

2 个答案:

答案 0 :(得分: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 :(得分:1)

无法使用array_walk_recursive()执行此操作。 Documentation

试试这个递归函数。

$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');