array_map用于对每个元素应用回调并返回新数组,不修改原数组;参数顺序为callback在前、数组在后,支持单/多数组并行映射,回调参数个数须匹配数组数量。

array_map 的基本用法和参数顺序
它不是用来遍历数组的替代品,而是专门做「对每个元素应用函数并返回新数组」这件事。第一个参数必须是回调函数,后面才是数组——顺序反了会报 Warning: array_map(): Argument #2 should be an array。
- 单数组时:
array_map($callback, $arr),回调接收一个参数 - 多数组时:
array_map($callback, $arr1, $arr2),回调按索引依次接收对应位置的元素(类似 zip) - 回调可以是匿名函数、字符串函数名(如
'strtoupper')、或数组形式的类方法([$obj, 'method'])
常见错误:传参方式不对导致返回 null 或空数组
最常踩的坑是把数组当成了回调函数传进去,比如写成 array_map($arr, $callback),PHP 会尝试把数组当 callable 调用,直接报 Fatal error: Uncaught TypeError: Illegal offset type;或者回调里用了引用参数(&$item),但 array_map 不支持引用传递,修改不会生效,也不会报错,容易误以为逻辑没跑。
- 别在回调里改原数组,
array_map总是返回新数组,原数组不变 - 如果回调返回
null,新数组对应位置就是null,不是跳过 - 输入数组长度不一致时,以最短的为准,多出的元素被忽略
和 foreach / array_walk 的关键区别在哪
array_map 返回新数组,不修改原数组;array_walk 是就地修改(通过引用),且只接受单个数组;foreach 最灵活但要手动构建新数组。性能上,三者差别不大,但语义不同:
- 需要变换值 → 用
array_map - 需要修改原数组里的值 → 用
array_walk(带 & 引用) - 需要条件判断、提前退出、或混合操作 → 直接
foreach -
array_map(null, ...$arrays)可模拟array_combine或转置二维数组(但要注意键对齐)
PHP 8.1+ 的变化和兼容性注意点
PHP 8.1 开始,array_map 对传入 null 回调的行为更严格:以前 array_map(null, $a) 等价于返回原数组副本,现在明确要求至少两个数组才能用 null;另外,如果回调抛出异常,整个 array_map 立即中止,不会继续处理后续元素。
- 老项目升级前,检查是否有
array_map(null, $arr)这种写法,应改为$arr或array_values($arr) - 不要依赖
array_map的执行顺序做副作用操作(比如发 HTTP 请求),它不保证顺序(虽然目前实现是顺序的,但文档没承诺) - 大量数据时,
array_map和foreach内存占用接近,但闭包回调略慢于内置函数(如'intval')
array_map,而不是看到“遍历”就套上去。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











