array_map 是 php 中用于对数组每个元素应用回调函数并返回新数组的内置函数,不修改原数组,不保留键名,支持单数组处理、多数组同步配对及自定义匿名函数逻辑。

array_map 是 PHP 中用来对数组每个元素统一应用回调函数的内置函数,适合批量转换、清洗或计算数据,不修改原数组,而是返回新数组。
基本用法:单个数组处理
最常见场景是对一个数组的所有值做相同操作,比如全部转大写、加前缀、取长度等:
$names = ['alice', 'bob', 'charlie'];
$upperNames = array_map('strtoupper', $names);
// 结果:['ALICE', 'BOB', 'CHARLIE']
<p>$lengths = array_map('strlen', $names);
// 结果:[5, 3, 7]</p>也可以传匿名函数实现自定义逻辑:
$prices = [19.99, 29.5, 9.9];
$withTax = array_map(function($p) {
return round($p * 1.13, 2); // 加 13% 税并保留两位小数
}, $prices);
// 结果:[22.59, 33.34, 11.19]
多数组同步处理:按索引配对传参
当传入多个数组时,array_map 会把各数组相同索引位置的元素依次作为参数,传给回调函数:
$first = ['John', 'Jane', 'Sam'];
$last = ['Doe', 'Smith', 'Wilson'];
$full = array_map(function($a, $b) {
return "$a $b";
}, $first, $last);
// 结果:['John Doe', 'Jane Smith', 'Sam Wilson']
注意:如果数组长度不一致,较短的数组会在末尾补 null,需在回调中判断避免报错。
键名保留吗?不保留 —— 返回索引数组
array_map 不保留原始键名,无论输入是关联数组还是索引数组,返回的总是数字索引(从 0 开始):
$data = ['a' => 10, 'b' => 20, 'c' => 30];
$result = array_map(function($v) { return $v * 2; }, $data);
// $result 是 [20, 40, 60],键变为 0,1,2
如需保留键名,改用 foreach 或 array_walk(后者可直接修改原数组):
- 用 foreach 手动重建关联数组
- 用 array_walk + 引用修改原数组(不返回新数组)
- 用 array_combine(array_keys($arr), array_map(...)) 拼回键名(仅限键值一一对应)
遇到 null 或空数组怎么办?
array_map 对空数组返回空数组,安全;但若回调函数未定义或传入 null 值,可能触发警告。建议:
- 确保回调函数存在且可调用(可用 is_callable 预检)
- 在匿名函数中检查参数是否为 null(尤其多数组长度不一时)
- 避免在回调里执行可能失败的操作(如访问对象属性),加 isset 或空合并
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











