array_map在php 8.0中仍用于对数组元素批量应用回调并返回新数组,不修改原数组、不保留键名;支持单/多数组映射、箭头函数,但不适用于过滤、键值操作或原地修改。

array_map 在 PHP 8.0 中用法没变,核心逻辑仍是“对数组每个元素应用回调函数,返回新数组”。它不修改原数组,也不关心键名(只处理值),适合做批量转换、清洗或格式化。
基本语法和最简用法
函数签名:
array_map(callback, array, ...)
说明:第一个参数是回调(函数名、匿名函数或箭头函数),后面跟一个或多个数组。当传入多个数组时,回调会按索引依次取各数组对应位置的值。
- 单数组示例:把字符串数组全转大写
$fruits = ['apple', 'banana', 'cherry'];
$upper = array_map('strtoupper', $fruits);
// 结果:['APPLE', 'BANANA', 'CHERRY']
- 用匿名函数做简单计算
$nums = [1, 2, 3, 4]; $squared = array_map(fn($n) => $n ** 2, $nums); // 结果:[1, 4, 9, 16]
处理多个数组(并行映射)
当传入两个及以上数组,array_map 会以最短数组长度为界,逐个索引调用回调,每个参数对应一个数组的当前元素。
- 合并两个数组对应位置的值
$a = [10, 20, 30]; $b = [1, 2, 3]; $result = array_map(fn($x, $y) => $x + $y, $a, $b); // 结果:[11, 22, 33]
- 如果数组长度不等,超出部分被忽略(不会报错)
- 空数组参与时,结果为空数组
注意键名丢失和 null 处理
array_map 不保留原始键名,返回数组总是数字索引(从 0 开始)。若需关联键,得自己用 foreach 或 array_combine。
- 带键名的数组会被“扁平化”
$data = ['a' => 1, 'b' => 2, 'c' => 3]; $mapped = array_map(fn($v) => $v * 10, $data); // $mapped 是 [10, 20, 30],键变为 0,1,2
- 传入 null 作为回调,等价于“原样返回”,常用于数组拷贝(浅拷贝)
$copy = array_map(null, $original_array);
常见坑与替代建议
遇到这些情况,array_map 可能不是最优解:
- 需要修改原数组 → 改用 foreach 直接赋值
- 需要过滤元素(删掉某些项)→ 用 array_filter
- 需要同时访问键和值且保留键 → 用 foreach 或 array_walk(后者可改原数组)
- 要聚合计算(如求和、拼接)→ 用 array_reduce
PHP 8.0 支持箭头函数,让简单映射更简洁;但复杂逻辑建议拆成独立函数或用 foreach,可读性更高。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











