PHP array_walk 与 array_map 使用对比

7次阅读

array_walk修改原数组,array_map返回新数组;前者作用于原数组并支持引用修改,后者创建新数组且支持多数组映射与类型转换

PHP array_walk 与 array_map 使用对比

array_walk 修改原数组,array_map 返回新数组 —— 这是两者最核心的区别。

作用对象与返回值不同

array_walk 作用于数组本身,不生成新数组,只对每个元素执行回调操作,返回布尔值(成功为 true);array_map 则始终创建并返回一个新数组,原数组完全不变。

  • array_walk($arr, function(&$v) { $v *= 2; }); // $arr 被直接修改
  • $new = array_map(function($v) { return $v * 2; }, $arr); // $arr 不变,$new 是结果

参数传递方式有差异

array_walk 的回调函数默认接收 值的引用(可选传键名),适合就地修改;array_map 默认接收值的副本,无法通过修改参数改变原数组,且支持多数组并行映射。

  • array_walk($arr, function(&$v, $k) { $v = strtoupper($v) . “_{$k}”; }); // 可改原值 + 用键
  • $result = array_map(NULL, $arr1, $arr2); // 合并两个数组成二维数组
  • $result = array_map(‘intval’, $strArray); // 批量类型转换,简洁安全

适用场景明显不同

需要遍历并修改原数组结构(如统一格式化、添加前缀、清理空值)时用 array_walk;需要转换、过滤、组合数据并保留原始数组时,优先选 array_map。

立即学习PHP免费学习笔记(深入)”;

  • 清洗用户输入:array_walk($_POST, ‘trim’); // 直接去空格
  • 构造 API 响应:$data = array_map(‘htmlentities’, $raw); // 安全转义后返回新数组
  • 提取字段:$ids = array_map(fn($item) => $item[‘id’], $users); // 简洁取列

注意键名处理逻辑

array_walk 会保留原数组的键名(包括字符串键、数字键、无序键);array_map 对关联数组也保留键名,但若传入多个数组,仅当所有数组键名一致时才按键对齐,否则按数字索引顺序配对。

  • $arr = [‘a’ => 1, ‘b’ => 2]; array_walk($arr, function($v, $k) { echo “$k:$v “; }); // 输出 a:1 b:2
  • $a = [‘x’=>10, ‘y’=>20]; $b = [‘x’=>100, ‘y’=>200]; array_map(null, $a, $b); // [[‘x’=>10,’x’=>100], [‘y’=>20,’y’=>200]]
text=ZqhQzanResources