网站首页 > 基础教程 正文
PHP 升级到了 8.4,个人觉得对我们写代码帮助最大的就是 PHP 8.4 引入的 array_find()、array_find_key()、array_any() 和 array_all() 这 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_find()
array_find() 是返回数组中第一个满足回调函数的元素,如果没有则返回 null,根据这个特性,我们很容易就实现这个函数:
if(!function_exists('array_find')){
function array_find($arr, $callback){
foreach($arr as $k => $v){
if($callback($v, $k)){
return $v;
}
}
}
}
比如我在字段处理中,如果字段没有定义类型,我根据它是否有其他属性来给他设置类型的代码,如果没有 array_find,我们一般这么写:
if(!empty($field['options'])){
$field['type'] = 'select';
}elseif(!empty($field['label'])){
$field['type'] = 'checkbox';
}elseif(!empty($field['fields'])){
$field['type'] = 'fieldset';
}else{
$field['type'] = 'text';
}
有了 array_find,一行就搞定了:
$field['type'] = array_find(['options'=>'select', 'label'=>'checkbox', 'fields'=>'fieldset'], fn($v, $k)=> !empty($field[$k])) ?: 'text';
array_find_key()
array_find_key() 和 array_find() 很像,只是它返回数组中第一个满足回调函数的元素的健名:
if(!function_exists('array_find_key')){
function array_find_key($arr, $callback){
foreach($arr as $k => $v){
if($callback($v, $k)){
return $k;
}
}
}
}
相比 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()
array_all() 判断数组中的每个元素是否都满足回调函数,意思是将每个元素传递给回调函数,都要返回 true:
if(!function_exists('array_all')){
function array_all($arr, $callback){
foreach($arr as $k => $v){
if(!$callback($v, $k)){
return false;
}
}
return true;
}
}
比如我写的 SMTP 发信扩展里面就有判断代码,需要「发信地址」,「邮箱账号」和「邮箱密码」这三个选项都设置了之后才生效:
if(array_all(['host', 'user', 'pass'], fn($k)=> WPJAM_SMTP::get_setting($k))){
// 执行代码
}
array_any()
array_any() 也是判断数组的元素是否满足满足回调函数,但是 array_any() 只需要一个满足即可,而 array_all() 一样则是需要全部都满足:
if(!function_exists('array_any')){
function array_any($arr, $callback){
foreach($arr as $k => $v){
if($callback($v, $k)){
return true;
}
}
return false;
}
}
上面例子中,发信设置扩展需要「发信地址」,「邮箱账号」和「邮箱密码」这三个选项都要设置,换成 array_any() 的思维,则只要一个没有设置就返回:
if(array_any(['host', 'user', 'pass'], fn($k)=> !WPJAM_SMTP::get_setting($k))){
return; // 返回,不生效
}
大家对比一下两个例子的代码,使用相类似的例子,通过不同的写法,也是一种更加清晰的区分函数的方式。
标题说了,还没升级到 PHP 8.4,也可以提前在 WordPress 中使用 PHP 8.4 引入的数组函数,意思只要你更新 WPJAM Basic 到最新版就能使用了。
猜你喜欢
- 2025-01-18 JWT: 使用JWT+PHP实现登录认证
- 2025-01-18 面向开发人员的 Kubernetes: 9 有状态应用程序 (1) 卷、持久卷和存储
- 2025-01-18 php 发送微信订阅消息
- 2025-01-18 weiphp图灵机器人存在的bug
- 2025-01-18 X语言解析器C++实现(模糊探索篇)
- 2025-01-18 100 个常见的 PHP 面试题和答案分享
- 2025-01-18 PHP 运算符和表达式
- 2025-01-18 php提示undefined index的几种解决方法
- 2025-01-18 通过冒泡排序测试Java和PHP性能
- 2025-01-18 PHP使用Phar打包控制台程序
- 05-162025前端最新面试题之HTML和CSS篇
- 05-16大数据开发基础之HTML基础知识
- 05-16微软专家告诉你Win10 Edge浏览器和EdgeHTML的区别
- 05-16快速免费将网站部署到公网方法(仅支持HTML,CSS,JS)
- 05-16《从零开始学前端:HTML+CSS+JavaScript的黄金三角》
- 05-16一个简单的标准 HTML 设计参考
- 05-16css入门
- 05-16前端-干货分享:更牛逼的CSS管理方法-层(CSS Layers)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)