这里有什么PHP - 我不明白?

时间:2012-03-02 22:11:41

标签: php

我有一个包含所有不同类型值的关联数组,但下面的内容将找到以Study结尾的所有数组键并检查它的布尔值,但我不明白的是它无论如何都要谨慎解释它的一步一步解释?

$study = array_filter(array_intersect_key($user, array_flip(preg_grep('/Study$/', array_keys($user)))));

if ($study) {
     ......
}

php如何对以Study结尾的密钥进行排序?

有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

具有嵌套函数调用的表达式从内部到最外部的parens进行计算。执行顺序如下:

  1. array_keys($user) - 将数组转换为键列表
  2. preg_grep('/Study$/', - 提取特定密钥
  3. array_flip( - 将密钥列表重新转换为关联密钥数组
  4. array_intersect_key($user, - 使用过滤后的关联键列表将原始数组缩减为所需子集
  5. array_filter( - 删除非真实条目(NULL和false)
  6. $study = - 分配结果

答案 1 :(得分:2)

array_keys($ user)将键作为值返回,并且preg_grep('/ Study $ /'过滤该列表以仅返回那些以字母“Study”结束的值($是结束锚点),给我们一组过滤的键值。

array_flip然后反转过滤后的数组,以便值成为新数组中的键,该数组仅包含带有过滤键集的条目。

然后,通过array_intersect_key()函数将该键的子集与原始数组键进行匹配,以便仅返回原始数组中具有与已过滤数组中的键匹配的键的条目。