隆重推出 PHP 8.4 中发布的新数组函数!

很高兴认识你!
我是Iosa,系统开发部门的一名新员工!
最近天气变得很冷。为什么天气冷的时候我会感到孤独?
总之,先不说这个,PHP 8.4 已经发布了!
我们公司主要用 PHP 开发,这次新增的数组函数看起来非常实用,所以我想给大家介绍一下!
添加了数组函数
这次新增的内容是
- array_find()
- array_find_key()
- array_any()
- array_all()
总共有四个这样的函数!
所有这些函数都可以通过传递一个数组作为第一个参数,一个回调函数作为第二个参数来使用。
回调函数的签名如下,第一个参数可以用作元素值,第二个参数可以用作元素键。
callback(mixed $value, mixed $key): bool
那么,让我们开始介绍吧!
array_find 函数
首先是 array_find 函数,
返回回调函数返回 true的第一个元素的值返回 null 。
以下是一个使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 查找数组中值长度超过 6 个字符的元素。 $result = array_find($array, function (string $value){ return strlen($value) > 6; }); var_dump($result); // 结果:string(8) "shiitake"
如上所示,当回调函数中 strlen($value) > 6 时,它返回值为 true 的值
如果回调函数返回 true 的值为多个值如下所示,则只会返回第一个元素
// *数组值相同 // 查找数组值以 e 开头的元素 $result = array_find($array, function (string $value){ return str_starts_with($value, 'e'); }); var_dump($result); // 结果:string(5) "enoki"
使用 PHP 框架 Laravel 的用户可能已经注意到,它的行为与辅助函数Arr::first(函数内部的处理也几乎相同)!
array_find_key 函数
接下来是 array_find_key 函数!
回调函数返回 true 的第一个元素的键如果找不到返回 null 。
以下是它的使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 查找长度超过 6 个字符的数组值。$result = array_find_key($array, function (string $value){ return strlen($value) > 6; }); var_dump($result); // 结果:string(8) "haratake"
如上所示,我们搜索数组值长度超过 6 个字符的元素,返回的值是该元素的键
此外,与 array_find 函数类似,如果存在多个值使得回调函数返回 true,则只会返回第一个元素的键
// *数组值相同 // 查找数组值以 e 开头的元素 $result = array_find_key($array, function (string $value){ return str_starts_with($value, 'e'); }); var_dump($result); // 结果:string(12) "tamabaritake"
,有一个
类似的函数叫做 array_search 但是,通过使用 array_find_key,你可以在回调函数中使用自定义条件和正则表达式,从而获得高度的灵活性,并使其易于在各种地方使用!
array_any 函数
接下来是 `array_any` 函数!
至少有元素的回调true 如果没有,false 。
以下是一个使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 是否存在以字母 m 开头的元素? $result = array_any($array, function (string $value){ return str_starts_with($value, 'm'); }); var_dump($result); // 结果:bool(false) // 是否存在长度超过 6 个字符的值? $result = array_any($array, function (string $value){ return strlen($value) > 6; }); var_dump($result); // 结果:bool(true)
Laravel Collection 类中的contains 方法的工作方式相同
对于使用过 contains 方法的人来说,应该很容易理解 array_any 函数的工作原理。
array_all 函数
最后,还有 array_all 函数!
如果数组中的所有返回true如果没有,false
以下是一个使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 所有值均以 e 开头 $result = array_all($array, function (string $value){ return str_starts_with($value, 'e'); }); var_dump($result); // 结果:bool(false) // 所有数组键均以 take 结尾 $result = array_any($array, function (string $value, string $key){ return preg_match('/.*take$/', $key); }); var_dump($result); // 结果:bool(true)
Laravel 的 Collection 类中的every 方法相同
概括
你觉得怎么样?
官方文档中对上述方法进行了详细说明,请务必查阅!
新增函数列表: https://www.php.net/releases/8.4/ja.php#new_array_find
就我个人而言,我觉得新的数组函数用途广泛且易于使用,因为它们允许使用回调函数。
我也认为很多功能都借鉴或受到了 Laravel 的启发。
我希望这种趋势能够继续发展,并且 PHP 语言本身的易用性也能得到提升!
希望您能记住这个功能的存在!
5