引入 PHP8.4 中发布的新数组函数!
很高兴见到你!
我叫Iosa,是系统开发部的一年级成员!
最近突然变冷了。为什么天冷的时候我会感到孤独?
好吧,抛开这些不谈,PHP8.4 已经发布了! !
我们公司主要使用PHP进行开发,但是这次添加的数组函数看起来很好用,所以给大家介绍一下!
添加了数组函数
这次新增的是
- 数组查找()
- array_find_key()
- 数组_任意()
- 数组_全部()
将会有4个!
所有函数都可以通过传递数组作为第一个参数和回调函数作为第二个参数来使用。
回调函数的签名如下,第一个参数可以用作元素值,第二个参数可以用作元素键。
回调(混合$值,混合$键):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 ($数组,函数(字符串$值){返回strlen($值)> 6; //结果:字符串(8) “原竹”
如上所示,我们正在搜索数组值超过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 ,则该函数将返回true 返回
false 下面是一个使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 是否存在值以 m 开头的元素? $array, function (string $value){ return str_starts_with($value, 'm'); // 结果: bool(false) // 是否存在超过 6 个字符的值? $result = array_any($array, function (string $value){ return strlen($value) > 6; }); // 结果:布尔(真)
Laravel Collection 类中的contains 方法相同
(虽然内部处理不同...)对于那些使用过 contains 方法的人来说,我想很容易想象 array_any 函数的行为。
array_all 函数
最后一个是array_all函数!
如果所有元素都存在,则该函数true ,否则将返回false
下面是一个使用示例!
$array = [ 'tamabaritake' => 'enoki', 'haratake' => 'shiitake', 'hiratake' => 'eringi', ]; // 所有值都以 e 开头吗? array , function (string $value){ return str_starts_with($value, 'e'); // 结果: bool(false) //是否所有数组键都以 take 结尾? $result = array_any($array, function (string $value, string $key){ return preg_match('/.*take$/', $key); }); ); // 结果:布尔(true)
Laravel 的 Collection 类中的every 方法具有相同的行为
概括
它怎么样?
上述方法的详细解释在官方文档中都有提供,所以一定要查看一下!
添加功能列表: //www.php.net/releases/8.4/ja.php#new_array_find
就我个人而言,我觉得新的数组函数用途广泛且易于使用,因为它们可以使用回调函数。
我还认为有很多东西是借鉴自 Laravel 或受 Laravel 启发的。
如果这种趋势在未来有所增加并且 PHP 语言本身的便利性得到提高,我会很高兴!
我希望你能记住这个函数并想:“我希望有这样一个函数!”