PHP 8.4 中的新数组查找函数
最后更新于 作者: Paul Redmond
四个新的数组函数即将出现在 PHP 8.4 中,它们是用于检查数组中是否存在满足特定条件的元素的辅助函数。新的函数是
-
array_find()
-
array_find_key()
-
array_any()
-
array_all()
array_find()
函数
array_find($array, $callback)
函数返回第一个使 $callback
返回 true
的元素
$array = [ 'a' => 'dog', 'b' => 'cat', 'c' => 'cow', 'd' => 'duck', 'e' => 'goose', 'f' => 'elephant']; array_find($array, function (string $value) { return strlen($value) > 4;}); // string(5) "goose" array_find($array, function (string $value) { return str_starts_with($value, 'f');}); // null // Find the first animal where the array key is the first symbol of the animal.array_find($array, function (string $value, $key) { return $value[0] === $key;});
使用 Laravel 的 Arr
或 Collection
,您可以结合闭包使用 first()
方法获得等效的功能
use Illuminate\Support\Arr;use Illuminate\Support\Collection; $array = [ 'a' => 'dog', 'b' => 'cat', 'c' => 'cow', 'd' => 'duck', 'e' => 'goose', 'f' => 'elephant']; new Collection($array) ->first(fn ($value) => strlen($value) > 4); // goose Arr::first( $array, fn ($value) => str_starts_with($value, 'f')); // null new Collection($array) ->first(fn ($value, $key) => $value[0] === $key); // cow
请注意,我们正在演示 无额外括号的类实例化,这应该也包含在 PHP 8.4 中。
array_find_key()
函数
array_find_key($array, $callback)
函数返回第一个使 $callback
返回 true
的元素的键。与 array_find()
一样,如果未找到匹配的元素,它将返回 null
$array = [ 'a' => 'dog', 'b' => 'cat', 'c' => 'cow', 'd' => 'duck', 'e' => 'goose', 'f' => 'elephant']; array_find_key($array, function (string $value) { return strlen($value) > 4;}); // string(1) "e" array_find_key($array, function (string $value) { return str_starts_with($value, 'f');}); // null array_find_key($array, function (string $value, $key) { return $value[0] === $key;}); // string(1) "c"
此函数的 RFC 实现如下所示
function array_find_key(array $array, callable $callback): mixed { foreach ($array as $key => $value) { if ($callback($value, $key)) { return $key; } } return null;}
使用 Laravel 的 Collection
,您可以获得与结合闭包使用 search()
方法类似的功能。但是,search()
在未找到项目时返回 false
,而不是 null
use Illuminate\Support\Arr;use Illuminate\Support\Collection; new Collection($array)->search(function (string $value) { return strlen($value) > 4;}); // string(1) "e" new Collection($array)->search(function (string $value) { return str_starts_with($value, 'f');}); // false new Collection($array)->search(function (string $value, $key) { return $value[0] === $key;}); // string(1) "c"
array_any()
和 array_all()
函数
RFC 的第二部分(以及单独的 2/3 投票)包括 array_any()
和 array_all()
函数。如果数组中的任何项目对 array_any()
返回 true
,以及如果数组中的所有项目对 array_all()
返回 true
,则可以使用这些函数。
$array = [ 'a' => 'dog', 'b' => 'cat', 'c' => 'cow', 'd' => 'duck', 'e' => 'goose', 'f' => 'elephant']; // Check, if any animal name is longer than 5 letters.array_any($array, function (string $value) { return strlen($value) > 5;}); // bool(true) // Check, if any animal name is shorter than 3 letters.array_any($array, function (string $value) { return strlen($value) < 3;}); // bool(false) // Check, if all animal names are shorter than 12 letters.array_all($array, function (string $value) { return strlen($value) < 12;}); // bool(true) // Check, if all animal names are longer than 5 letters.array_all($array, function (string $value) { return strlen($value) > 5;}); // bool(false)
了解更多
您可以在 RFC 中阅读有关此更改的所有详细信息。此功能将在 PHP 8.4 中推出。这些函数的实现可以在 GitHub 上找到。