我有一个包含所有不同类型值的关联数组,但下面的内容将找到以Study
结尾的所有数组键并检查它的布尔值,但我不明白的是它无论如何都要谨慎解释它的一步一步解释?
$study = array_filter(array_intersect_key($user, array_flip(preg_grep('/Study$/', array_keys($user)))));
if ($study) {
......
}
php如何对以Study
结尾的密钥进行排序?
有没有更好的方法来做到这一点?
答案 0 :(得分:3)
具有嵌套函数调用的表达式从内部到最外部的parens进行计算。执行顺序如下:
array_keys($user)
- 将数组转换为键列表preg_grep('/Study$/',
- 提取特定密钥array_flip(
- 将密钥列表重新转换为关联密钥数组array_intersect_key($user,
- 使用过滤后的关联键列表将原始数组缩减为所需子集array_filter(
- 删除非真实条目(NULL和false)$study =
- 分配结果答案 1 :(得分:2)
array_keys($ user)将键作为值返回,并且preg_grep('/ Study $ /'过滤该列表以仅返回那些以字母“Study”结束的值($是结束锚点),给我们一组过滤的键值。
array_flip然后反转过滤后的数组,以便值成为新数组中的键,该数组仅包含带有过滤键集的条目。
然后,通过array_intersect_key()函数将该键的子集与原始数组键进行匹配,以便仅返回原始数组中具有与已过滤数组中的键匹配的键的条目。