隆重推出 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
加载中...
5票,平均分:1.00/15
677
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

伊奥萨

它基本上是一辆自行车。