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

很高兴认识你!
我是系统开发部的伊奥萨,我是一名职场新人,今年是第一年!

最近天气变得很冷。为什么天气冷的时候我会感到孤独?

总之,先不说这个,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 的值为多个值第一个元素只会返回

 // *数组值相同 // 查找数组值以 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 函数!
元素所有如果都存在否则返回 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
771
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

伊奥萨

它基本上是一辆自行车。