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 默认接收值的副本,无法通过修改参数改变原数组,且支持多数组并行映射。
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
- 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]]










