将回调应用于嵌套数组

时间:2010-08-21 06:39:41

标签: php arrays

我有这个数组:

$array = array('a' => 'apple' , 'c' => 'cat', 'ar' => array('d' => 'dog', 'e' => 'elephant'));

1.4.3:

Array
(
    [a] => apple
    [c] => cat
    [ar] => Array
        (
            [d] => dog
            [e] => elephant
        )

)

如何在保留键的同时使上面嵌套数组的值大写。我试过这个:

function upper($str){
  return strtoupper($str);
}

$array_upper = array_map('upper', $array);

但它似乎不适用于嵌套数组,因为这是它的结果:

Array
(
    [a] => APPLE
    [c] => CAT
    [ar] => ARRAY
)

虽然我想要这样的结果:

Array
(
    [a] => APPLE
    [c] => CAT
    [ar] => ARRAY
        (
            [d] => DOG
            [e] => ELEPHANT
        )

)

尝试使用array_walkarray_walk_recursive,但在返回数组上使用print_r(...)结果为1

所以基本上如何将回调函数应用于可以嵌套到n级的嵌套数组。这应该很容易,但我遗漏了一些东西:(

1 个答案:

答案 0 :(得分:2)

array_walk_recursive()应该有效,但它会修改你传入的数组并返回一个bool,这就是你打印1的原因。

请注意,您需要确保作为回调传递的函数还将第一个参数(数组元素值)作为引用并修改它而不是返回修改后的值。 (与array_map()不同),例如

function upper(&$str){
    $str = strtoupper($str);
}