本文目录导读:

- PHP 7.4:短闭包(箭头函数)与
array_merge无关,但新版新增了spread操作符 - PHP 8.0:
str_contains、str_starts_with、str_ends_with(字符串相关,但常用于数组判断) - PHP 8.1:
array_is_list()已经引入,8.1 没有新增专门的数组函数。 - PHP 8.2 / 8.3:暂时没有新增独立的数组函数
- PHP 8.4(最新稳定版):重磅新增!
- 总结表格(按版本)
- 实用建议
在 PHP 中,数组操作是非常核心的功能,从 PHP 7.4 到 PHP 8.x,新增了一些非常实用的数组函数,能够让你写出更简洁、更高效的代码。
下面按照 PHP 版本顺序,为你整理和讲解这些“新”数组函数。
PHP 7.4:短闭包(箭头函数)与 array_merge 无关,但新版新增了 spread 操作符
虽然 7.4 没有直接的新数组函数,但它引入了 解包(Spread)操作符在数组中使用,简化了合并数组的操作。
示例:合并数组(取代 array_merge)
$arrayA = ['a', 'b']; $arrayB = ['c', 'd']; // PHP 7.4+ $result = [...$arrayA, ...$arrayB]; print_r($result); // 输出:['a', 'b', 'c', 'd'] // 旧写法: // $result = array_merge($arrayA, $arrayB);
PHP 8.0:str_contains、str_starts_with、str_ends_with(字符串相关,但常用于数组判断)
虽然这些是字符串函数,但它们经常配合数组的 in_array 使用,PHP 8.0 主要新增了:
- 没有新增核心数组函数,但
match表达式和Named Arguments让数组处理更优雅。
array_is_list() 是 PHP 8.0 明确新增的数组函数。
array_is_list() - 判断数组是否“索引连续且从0开始”
$list = ['a', 'b', 'c']; // 是列表 $notList = ['a' => 1, 'b' => 2]; // 不是列表(关联数组) $mixed = [0 => 'a', 1 => 'b', 3 => 'c']; // 不是列表(索引不连续) var_dump(array_is_list($list)); // true var_dump(array_is_list($notList));// false var_dump(array_is_list($mixed)); // false
应用场景:JSON 编码时,判断输出的是数组还是对象。
$data = ['name' => 'Tom', 'age' => 20];
if (array_is_list($data)) {
echo json_encode($data); // ["Tom", 20] (数组)
} else {
echo json_encode($data); // {"name":"Tom","age":20} (对象)
}
PHP 8.1:array_is_list() 已经引入,8.1 没有新增专门的数组函数。
1 主要新增了 enum、readonly 特性,数组函数方面没有新成员。
PHP 8.2 / 8.3:暂时没有新增独立的数组函数
但这段时间主要优化了性能,array_* 函数内部指针处理的优化。
PHP 8.4(最新稳定版):重磅新增!
PHP 8.4 是近年来对数组支持最大的一个版本,新增了 4 个非常实用的数组函数。
1️⃣ array_find() - 查找第一个符合条件的元素
$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie'],
];
// 找到第一个名字以 'B' 开头的用户
$found = array_find($users, function($user) {
return str_starts_with($user['name'], 'B');
});
print_r($found);
// 输出:['id' => 2, 'name' => 'Bob']
// 如果没有找到,返回 null
2️⃣ array_find_key() - 查找第一个符合条件的元素的键名
$array = ['a' => 10, 'b' => 20, 'c' => 30];
$key = array_find_key($array, function($value) {
return $value > 15;
});
echo $key; // 输出:'b' (第一个值大于15的键)
3️⃣ array_all() - 检查是否所有元素都满足条件(类似 SQL 的 ALL)
$scores = [85, 90, 78, 92];
$allPassed = array_all($scores, function($score) {
return $score >= 60;
});
var_dump($allPassed); // true (所有分数都大于等于60)
$allExcellent = array_all($scores, function($score) {
return $score >= 90;
});
var_dump($allExcellent); // false (不是所有都 >= 90)
4️⃣ array_any() - 检查是否任意一个元素满足条件(类似 SQL 的 ANY)
$scores = [50, 60, 45, 80];
$hasPassed = array_any($scores, function($score) {
return $score >= 60;
});
var_dump($hasPassed); // true (至少有一个 >= 60)
$hasFailed = array_any($scores, function($score) {
return $score < 40;
});
var_dump($hasFailed); // false (没有低于40的)
总结表格(按版本)
| 版本 | 函数 / 特性 | 作用 | 代码示例 |
|---|---|---|---|
| 4 | Spread 操作符 | 合并数组 | $new = [...$a, ...$b]; |
| 0 | array_is_list() |
判断是否索引连续且从0开始 | array_is_list(['a','b']) |
| 4 | array_find() |
查找第一个满足条件的元素 | array_find($arr, fn($v) => $v > 0) |
| 4 | array_find_key() |
查找第一个满足条件的元素的键 | array_find_key($arr, fn($v) => ...) |
| 4 | array_all() |
检查是否所有元素都符合条件 | array_all($arr, fn($v) => $v > 0) |
| 4 | array_any() |
检查是否有任一元素符合条件 | array_any($arr, fn($v) => $v > 0) |
实用建议
- 如果你还在用 PHP 7.x:尽快考虑升级到 8.4,这些新函数能大幅减少
foreach和手动if判断的代码量。 - 如果你想写更现代的代码:
- 用
array_find替代foreach + break。 - 用
array_all/array_any替代array_filter + count判断。 - 用
array_is_list避免手动检查键值。
- 用
最后提醒:这些新函数在 PHP 8.4+ 中才可用,如果项目环境是 PHP 8.0-8.3,你需要自己实现兼容函数(或使用 Polyfill)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播