array_map是php中用于数组映射的函数,不修改原数组,支持单/多数组一对一转换及匿名函数与内置函数组合使用,适用于纯数据转换场景。

array_map 是 PHP 中处理数组的利器,它不修改原数组,而是对每个元素应用回调函数后返回新数组。掌握它的关键在于理解“映射”本质——一对一转换,且支持多数组并行处理。
基础用法与常见误区
最简形式是传入一个回调函数和一个数组:
$numbers = [1, 2, 3]; $squares = array_map(fn($n) => $n ** 2, $numbers); // [1, 4, 9]
注意:如果回调返回 null,结果中对应位置就是 null,不是跳过;若回调函数不存在或不可调用,会触发警告;传入 null 作为回调等价于“保持原样”,但仅在单数组时有效(多数组会报错)。
多数组并行映射(实用但易忽略)
array_map 支持同时传入多个数组,回调函数参数个数需匹配数组数量,按索引对齐执行:
立即学习“PHP免费学习笔记(深入)”;
- 数组长度不一致时,以最短者为准,多余元素被忽略
- 可用于合并字段、批量格式化、条件配对计算
例如,合并用户姓名和年龄:
初阶PHP Apache MySQL网站设计来自作者多年学习、应用和讲授PHP的经验与体会,是专为学习PHP+MySQL数据库编程人员编与的入门教材。在最后二章设计了2个贴近实际应用的典型案例:留言本系统和论坛系统,每个案例先介绍开发思路、步骤,再给出全部源代码,使所学内容与实际应用紧密结合,特别是论坛系统将全书的案例串讲起来,力求使读者学到最贴近应用前沿的知识和技能。
$names = ['Alice', 'Bob', 'Charlie']; $ages = [25, 30]; $result = array_map(fn($n, $a) => "$n ($a)", $names, $ages); // ['Alice (25)', 'Bob (30)'] —— 第三个元素因 $ages 不足被舍弃
配合匿名函数与内置函数提升效率
避免写冗长循环,直接组合常用操作:
- 字符串批量处理:
array_map('trim', $strings)、array_map('strtoupper', $words) - 类型转换:
array_map('intval', $strNumbers)、array_map('floatval', $mixed) - 安全过滤:
array_map('htmlspecialchars', $userInputs)
注意:传递字符串函数名时,确保函数存在且接受单个参数;若需额外参数(如 number_format),须用匿名函数封装。
替代 foreach 的典型场景
适合纯数据转换、无状态操作,比如:
- API 响应前统一添加前缀:
array_map(fn($id) => 'USR_' . $id, $ids) - 从对象数组提取属性:
array_map(fn($obj) => $obj->name, $users) - 日期数组转时间戳:
array_map('strtotime', $dateStrings) - 空值兜底处理:
array_map(fn($v) => $v ?? 'N/A', $data)
不适用场景:需要中断遍历(break)、依赖上一元素结果、或需同时修改原数组结构(此时用 foreach + 引用更清晰)。
灵活但有边界,用对地方才能真正简化代码。










