编程

一些新的数组函数正在加入 PHP 8.4

305 2024-05-29 01:58:00

PHP 8.4 仍在开发中,到目前为止已经有了一系列新功能和改进。新功能不断出现,其中一个最近出现的功能是添加了新的数组方法。
有一个 RFC(仍处于投票阶段),它建议添加这些新方法,这些方法本质上与检查数组中是否存在与特定条件匹配的元素有关。
新方法是:

  • array_find
  • array_find_key
  • array_any
  • array_all

array_find 方法

array_find 返回 $callback 返回值为 true 的第一个元素的值。如果没有找到匹配的元素,函数将返回 NULL

array_find(array $array, callable $callback)

示例如下:

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
    'orange' => 'orange',
];

var_dump(array_find($fruits, function ($fruit) {
    return str_starts_with($fruit, 'y')
}));
// Output: string(5) "yellow"

var_dump(array_find($fruits, function ($fruit) {
    return str_starts_with($fruit, 'z')
}));
// Output: NULL

array_find_key 方法

array_find_key 返回 $callback 返回值为 true 的第一个元素的键。

array_find_key(array $array, callable $callback)

示例如下:

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
    'orange' => 'orange',
];

var_dump(array_find_key($fruits, function ($fruit) {
    return str_starts_with($fruit, 'y')
}));
// Output: string(5) "banana"

var_dump(array_find_key($fruits, function ($fruit) {
    return str_starts_with($fruit, 'z')
}));
// Output: NULL

array_any 方法

如果数组中的任何元素通过 $callback 测试,array_any 方法将返回 true。否则,它将返回 false

array_any(array $array, callable $callback)

此方法类似于 JavaScript 中的 Array.prototype.some() 方法。

示例如下:

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
    'orange' => 'orange',
];

var_dump(array_any($fruits, function ($fruit) {
    return str_starts_with($fruit, 'y')
}));
// Output: true

var_dump(array_any($fruits, function ($fruit) {
    return str_starts_with($fruit, 'z')
}));
// Output: false

array_all 方法

如果数组中的所有元素都通过 $callback 测试,array_all 方法将返回 true。否则,它将返回 false

array_all(array $array, callable $callback)

示例如下:

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
    'orange' => 'orange',
];

var_dump(array_all($fruits, function ($fruit) {
    return strlen($fruit) > 2
}));
// Output: true

var_dump(array_all($fruits, function ($fruit) {
    return str_starts_with($fruit, 'z')
}));
// Output: false

结语

虽然 RFC 仍处于投票阶段,但我相信这些方法最终将成为 PHP 8.4 的一部分,以观察投票趋势,因为目前大多数投票都赞成添加这些方法。
这些数组方法真的很好,让我们可以编写更简洁、可读的代码。