在 WordPress 中如何过滤数组?从 PHP 的 array_filter 到 wpjam_filter

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

文章介绍WordPress中增强数组过滤的wpjam_filter函数。原生array_filter存在过滤后键不连续、常用判断需反复写闭包、关联数组条件繁琐、递归过滤需自写等问题。wpjam_filter支持关键字(如'!null'、'unique')、关联数组条件、白名单及递归过滤,并自动保持list形态,简化代码。

🔎

延伸解读

wpjam_filter 的适用场景与边界

wpjam_filter 并非要取代原生 array_filter,而是针对高频过滤场景的增强。当代码中反复出现“过滤后重排键、去重、去 null、按关联条件筛选”时,它能显著缩短代码。但简单过滤用原生 array_filter 更直接。另外,动态条件传入时需先判空,避免空数组 [] 被当作“无约束”条件而不过滤任何数据。

关键字与递归的实用技巧

wpjam_filter 支持 '!null'、'!blank'、'unique' 等关键字,其中 '!xxx' 会自动补 is_ 前缀并默认开启递归,适合清理嵌套数组。递归过滤时,深层先执行,父容器再过滤,因此空数组会被移除。注意:普通函数如 strlen 不能直接作为关键字,否则会被误判为双参数模式导致报错。

形态保持带来的编码便利

原生 array_filter 保留原键,过滤后可能产生键空洞,导致 json_encode 输出对象而非数组。wpjam_filter 通过 array_is_list 自动判断:若输入是 list,则输出自动重排为连续索引;若输入是关联数组,则保留键。这省去了手动调用 array_values 的麻烦,让代码更简洁且行为可预期。

❓

Q&A

WordPress 中 wpjam_filter 函数是做什么的?

wpjam_filter 是一个用于增强数组过滤的 WordPress 函数,它解决了原生 array_filter 的多个痛点,支持关键字过滤、关联数组条件、白名单和递归过滤,并自动保持 list 形态。

原生 array_filter 有哪些常见问题?

原生 array_filter 存在四个主要问题:过滤后键不连续(需手动 array_values);常用判断需反复写闭包;关联数组条件表达繁琐;递归过滤需自己编写递归函数。

wpjam_filter 如何保持数组的 list 形态?

wpjam_filter 通过 array_is_list 检测输入数组是否为 list,如果是,则在过滤后自动调用 array_values 重排键,确保输出也是 list;对于关联数组则保留原键。

wpjam_filter 支持哪些关键字过滤?

wpjam_filter 支持的关键字包括:'unique'(去重)、'!null'(去 null)、'!blank'(去空白)、'!numeric'(去数字),其中 '!null'、'!blank'、'!numeric' 默认递归过滤。

如何使用 wpjam_filter 进行递归过滤?

在 wpjam_filter 的第三个参数传入 true 即可开启递归过滤,例如 wpjam_filter($arr, '!null', true) 会递归去除所有层级的 null 值。

wpjam_filter 和 wpjam_find 有什么区别?

wpjam_filter 和 wpjam_find 都是按条件过滤数组的函数,支持关联数组和回调。区别在于:wpjam_find 返回第一个匹配的元素(原子操作),wpjam_filter 返回所有匹配的元素(集合操作)。

🏷️

标签

➡️

继续阅读