PHP array_map() 函数详解:对数组元素统一处理
- 2026年7月3日
- 115 次
文章目录
处理数组时,经常需要对每个元素做统一转换:比如把所有字符串转小写、把所有数字乘以2、或者对每个对象调用某个方法。以前用 foreach 循环处理,后来发现array_map()更简洁高效。
这篇文章把array_map()的用法、多数组处理、结合匿名函数等技巧整理出来。
array_map()基本用法
对数组的每个元素执行回调函数,返回处理后的新数组。
$numbers = [1, 2, 3, 4, 5];
// 每个数字乘以2
$doubled = array_map(function($n) {
return $n * 2;
}, $numbers);
print_r($doubled);
// [2, 4, 6, 8, 10]
?>
处理字符串
<?php
$emails = [
'ZhangSan@Example.COM',
'LiSi@Test.org',
'WANGWu@Demo.Net',
];
// 统一转小写(邮箱地址规范化)
$normalized = array_map('strtolower', $emails);
print_r($normalized);
/*
[
0 => zhangsan@example.com,
1 => lisi@test.org,
2 => wangwu@demo.net
]
*/
// 注意:直接传函数名 'strtolower' 而不是带括号
// array_map('strtolower', $emails) 等价于
// array_map(function($e) { return strtolower($e); }, $emails)
?>
多数组同时处理
array_map()可以接受多个数组,回调函数相应增加参数:
$first_names = ['张', '李', '王'];
$last_names = ['三', '四', '五'];
// 把两个数组合并为全名
$full_names = array_map(function($first, $last) {
return $first . $last;
}, $first_names, $last_names);
print_r($full_names);
// ['张三', '李四', '王五']
?>
数组长度不一致时的处理
如果数组长度不同,较短的数组会用 null 填充:
$names = ['张三', '李四'];
$ages = [28, 30, 35];
$result = array_map(function($name, $age) {
return "$name: $age岁";
}, $names, $ages);
print_r($result);
// [
// 0 => '张三: 28岁',
// 1 => '李四: 30岁',
// 2 => ': 35岁' // name为null
// ]
?>
实战场景
场景1:批量转换数据库字段类型
<?php
// 从API获取的数据,所有数字都是字符串
$users = [
['id' => '1001', 'name' => '张三', 'score' => '95'],
['id' => '1002', 'name' => '李四', 'score' => '87'],
['id' => '1003', 'name' => '王五', 'score' => '76'],
];
// 批量转换类型
$users = array_map(function($user) {
$user['id'] = (int)$user['id'];
$user['score'] = (int)$user['score'];
return $user;
}, $users);
// 现在可以安全地用于数据库插入或排序
?>
场景2:数组元素转大写/标题格式
<?php
$tags = ['php', 'javascript', 'python', 'css'];
// 转为首字母大写(标签规范化)
$title_tags = array_map('ucfirst', $tags);
print_r($title_tags);
// ['Php', 'Javascript', 'Python', 'Css']
// 转标题格式
$formatted = array_map(function($tag) {
return ucwords(str_replace('-', ' ', $tag));
}, ['hello-world', 'php-basics', 'css-tricks']);
print_r($formatted);
// ['Hello World', 'Php Basics', 'Css Tricks']
?>
场景3:提取对象数组的某个字段
<?php
class User {
public function __construct(public string $id, public string $name) {}
}
$users = [
new User('1', '张三'),
new User('2', '李四'),
new User('3', '王五'),
];
// 提取所有用户ID
$ids = array_map(function($user) {
return $user->id;
}, $users);
print_r($ids);
// ['1', '2', '3']
?>
<?php
// 从API获取的数据,所有数字都是字符串
$users = [
['id' => '1001', 'name' => '张三', 'score' => '95'],
['id' => '1002', 'name' => '李四', 'score' => '87'],
['id' => '1003', 'name' => '王五', 'score' => '76'],
];
// 批量转换类型
$users = array_map(function($user) {
$user['id'] = (int)$user['id'];
$user['score'] = (int)$user['score'];
return $user;
}, $users);
// 现在可以安全地用于数据库插入或排序
?>
<?php
$tags = ['php', 'javascript', 'python', 'css'];
// 转为首字母大写(标签规范化)
$title_tags = array_map('ucfirst', $tags);
print_r($title_tags);
// ['Php', 'Javascript', 'Python', 'Css']
// 转标题格式
$formatted = array_map(function($tag) {
return ucwords(str_replace('-', ' ', $tag));
}, ['hello-world', 'php-basics', 'css-tricks']);
print_r($formatted);
// ['Hello World', 'Php Basics', 'Css Tricks']
?>
场景3:提取对象数组的某个字段
<?php
class User {
public function __construct(public string $id, public string $name) {}
}
$users = [
new User('1', '张三'),
new User('2', '李四'),
new User('3', '王五'),
];
// 提取所有用户ID
$ids = array_map(function($user) {
return $user->id;
}, $users);
print_r($ids);
// ['1', '2', '3']
?>
<?php
class User {
public function __construct(public string $id, public string $name) {}
}
$users = [
new User('1', '张三'),
new User('2', '李四'),
new User('3', '王五'),
];
// 提取所有用户ID
$ids = array_map(function($user) {
return $user->id;
}, $users);
print_r($ids);
// ['1', '2', '3']
?>
若非作者标注皆为李涛自留地原创文章,转载或复制请以超链接形式并注明出处。
- 用PHP的if判断语句简单制作一个计算器 2022-06-21
- PHP魔术方法toString方法如何使用?PHP魔术方法toString方法使用实例 2022-12-21
- 如何使用PHP函数制作一张简单的图片 使用PHP函数制作图片需要哪些函数 2022-11-21
- Python如何将两个列表的元素合并为字典? 2021-11-15
- PHPCMS中Tags标签伪静态步骤:PHPCMS首页、文章页调用tags标签的方法 2022-11-13
- PHP 数组查找函数 in_array()、array_search()、array_keys() 实战对比 2026-07-02
