还没升级 PHP 8.4,也可以提前在WordPress中使用新的数组函数

摘要:其实这四个函数在 JavaScript 的 Array 的实例方法中就有了,只是他的命名方式和 PHP 有点不一样,就他是用 every 和 some 而不是 all 和 any,我之前写代码的时候,也有一些地方需要使用到这四个数组函数,所以我基于 JavaS

PHP 升级到了 8.4,个人觉得对我们写代码帮助最大的就是 PHP 8.4 引入的 array_find、 和 这 4 个 array_* 数组函数。

其实这四个函数在 JavaScript 的 Array 的实例方法中就有了,只是他的命名方式和 PHP 有点不一样,就他是用 every 和 some 而不是 all 和 any,我之前写代码的时候,也有一些地方需要使用到这四个数组函数,所以我基于 JavaScript 的方式在 WPJAM Basic 中集成了这四个方法。

在 PHP 8.4 发布之后我基于 PHP 8.4 命名方式做了一些优化,使得大家在没有升级到 PHP 8.4,也可以提前在 WordPress 中使用 PHP 8.4 引入的数组函数。

array_findarray_find 是返回数组中第一个满足回调函数的元素,如果没有则返回 null,根据这个特性,我们很容易就实现这个函数:比如我在字段处理中,如果字段没有定义类型,我根据它是否有其他属性来给他设置类型的代码,如果没有 array_find,我们一般这么写:有了 array_find,一行就搞定了:$field['type'] = array_find(['options'=>'select', 'label'=>'checkbox', 'fields'=>'fieldset'], fn($v, $k)=> !empty($field[$k])) ?: 'text'; 很像,只是它返回数组中第一个满足回调函数的元素的健名:

相比 array_find 函数的定义,唯一的区别,它 return 的是 key 而不是 value。

上面的获取字段的类型的代码,也可以使用 array_find_key 来实现,大家看看区别:

$field['type'] = array_find_key(['select'=>'options', 'checkbox'=>'label', 'fieldset'=>'fields'], fn($v, $k)=> !empty($field[$v])) ?: 'text';array_all 判断数组中的每个元素是否都满足回调函数,意思是将每个元素传递给回调函数,都要返回 true:if(!function_exists('array_all')){
functionarray_all($arr,$callback){
foreach($arras$k=>$v){
if(!$callback($v,$k)){
returnfalse;
}
}

returntrue;
}
}

比如我写的 SMTP 发信扩展里面就有判断代码,需要「发信地址」,「邮箱账号」和「邮箱密码」这三个选项都设置了之后才生效:

if(array_all(['host','user','pass'],fn($k)=>WPJAM_SMTP::get_setting($k))){
// 执行代码
}array_any 也是判断数组的元素是否满足满足回调函数,但是 array_any 只需要一个满足即可,而 array_all 一样则是需要全部都满足:上面例子中,发信设置扩展需要「发信地址」,「邮箱账号」和「邮箱密码」这三个选项都要设置,换成 array_anyif(array_any(['host','user','pass'],fn($k)=>!WPJAM_SMTP::get_setting($k))){
return;// 返回,不生效
}

大家对比一下两个例子的代码,使用相类似的例子,通过不同的写法,也是一种更加清晰的区分函数的方式。😄

标题说了,还没升级到 PHP 8.4,也可以提前在 WordPress 中使用 PHP 8.4 引入的数组函数,意思只要你更新 WPJAM Basic 到最新版就能使用了,所以记得更新,有什么问题,可以在这里或者到知识星球给我留言

来源:明明科技论

相关推荐