PHP 怎么PHP 新数组函数

wen PHP项目 2

本文目录导读:

PHP 怎么PHP 新数组函数

  1. PHP 7.4:短闭包(箭头函数)与 array_merge 无关,但新版新增了 spread 操作符
  2. PHP 8.0:str_containsstr_starts_withstr_ends_with(字符串相关,但常用于数组判断)
  3. PHP 8.1:array_is_list() 已经引入,8.1 没有新增专门的数组函数。
  4. PHP 8.2 / 8.3:暂时没有新增独立的数组函数
  5. PHP 8.4(最新稳定版):重磅新增!
  6. 总结表格(按版本)
  7. 实用建议

在 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_containsstr_starts_withstr_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 主要新增了 enumreadonly 特性,数组函数方面没有新成员。


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)。

抱歉,评论功能暂时关闭!