array_walk_recursive()

1. 定义

该函数将使用用户自定义的函数对数组中的每个元素进行处理,与array_walk()函数不同的是,该函数还会深入地递归到更深层次的数组中去。 成功时返回TRUE,失败则返回FALSE。

2. 语法

array_walk_recursive ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : bool

3. 参数说明

参数 可选性 数据类型 描述
$array 必需 数组 被调用回调函数的数组
$callback 必需 可回调类型 用户自定义的回调函数
$userdata 可选 mixed 如果存在,则会作为第三个参数发送给$callback函数,默认为NULL

其中,$callback回调函数接受两个参数(如果$userdata未传入的话),第一个是数组元素的值,第二个是数组元素的键名。 请记住,始终不应该在该函数中改变数组本身的结构(比如增加/删除元素等),否则将造成不可预期的结果。

注意,该函数无法改变键名。

4. 示例

<?php

// array_walk_recursive()
// 使用用户自定义的函数对数组中的每个元素进行处理,与`array_walk()`函数不同的是,该函数还会深入地递归到更深层次的数组中去

$arr = ['name'=>'极速数据', 'business'=>'PHP教程', 'work'=>'API参考'];
function change_value(&$value, $key)
{// 改变键值需要使用 引用符号&
    $value = 'prefix_'.$value;
}

$arr = ['name'=>'极速数据', 'business'=>'PHP教程', 'work'=>['API参考', '数据查询', '教程案例'], 'date'=>'2013年'];
$res = @array_walk($arr, 'change_value');// 不能迭代数组中的数组
var_dump($res);// 输出:bool(true)
var_dump($arr);
/* 输出:
array(4) {
  ["name"]=>
  string(19) "prefix_极速数据"
  ["business"]=>
  string(16) "prefix_PHP教程"
  ["work"]=>
  string(12) "prefix_Array"
  ["date"]=>
  string(14) "prefix_2013年"
}
*/

$arr = ['name'=>'极速数据', 'business'=>'PHP教程', 'work'=>['API参考', '数据查询', '教程案例'], 'date'=>'2013年'];
$res = array_walk_recursive($arr, 'change_value');// 成功迭代数组中的每一个值(包括数组中的数组)
var_dump($res);// 输出:bool(true)
var_dump($arr);
/* 输出:
array(4) {
  ["name"]=>
  string(19) "prefix_极速数据"
  ["business"]=>
  string(16) "prefix_PHP教程"
  ["work"]=>
  array(3) {
    [0]=>
    string(16) "prefix_API参考"
    [1]=>
    string(19) "prefix_数据查询"
    [2]=>
    string(19) "prefix_教程案例"
  }
  ["date"]=>
  string(14) "prefix_2013年"
}
*/

5. 延展阅读

  • array_walk():使用用户自定义的回调函数处理指定数组的每一个元素