array_walk()

1. 定义

该函数将使用用户自定义的回调函数处理指定数组的每一个元素。 成功时返回TRUE,失败则返回FALSE。

2. 语法

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

3. 参数说明

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

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

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

4. 示例

<?php

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

$arr = ['name'=>'极速数据', 'business'=>'PHP教程', 'work'=>'API参考'];

function callback($value, $key)
{
    // 试图改变键名
    $key = 'prefix_'.$key;
}
$res = array_walk($arr, 'callback');
var_dump($res);// 输出:bool(true)
var_dump($arr);
/* 输出:(键名并没有发生变化)
array(3) {
  ["name"]=>
  string(12) "极速数据"
  ["business"]=>
  string(9) "PHP教程"
  ["work"]=>
  string(9) "API参考"
}
*/

function callback2($value, $key)
{
    // 试图改变键值
    $value = 'prefix_'.$value;
}
$res = array_walk($arr, 'callback2');
var_dump($res);// 输出:bool(true)
var_dump($arr);
/* 输出:(键值并没有发生变化)
array(3) {
  ["name"]=>
  string(12) "极速数据"
  ["business"]=>
  string(9) "PHP教程"
  ["work"]=>
  string(9) "API参考"
}
*/

function callback3(&$value, $key)
{// 改变键值需要使用 引用符号&
    $value = 'prefix_'.$value;
}
$res = array_walk($arr, 'callback3');
var_dump($res);// 输出:bool(true)
var_dump($arr);
/* 输出:(键值成功改变)
array(3) {
  ["name"]=>
  string(19) "prefix_极速数据"
  ["business"]=>
  string(16) "prefix_PHP教程"
  ["work"]=>
  string(16) "prefix_API参考"
}
*/

5. 延展阅读

  • array_walk_recursive():将使用用户自定义的函数对数组中的每个元素进行处理,与array_walk()函数不同的是,该函数还会深入地递归到更深层次的数组中去
  • list():将数组中的值赋给指定变量
  • each():返回当前指针指向的元素的键值对,并将指针指向下一个数组元素(该函数从 PHP 7.2.0 开始被弃用!)
  • array_map():对数组中的每个元素都调用指定函数