如何在PHP多维数组中查找特定内层值对应的一级索引(无需循环)
实现方案
可以利用PHP的数组函数组合实现,避免显式循环,直接写成表达式形式:
简洁写法(直接嵌入索引表达式)
$x = $arr[array_search(true, array_map(fn($item) => in_array('six', array_column($item, 'b')), $arr))]; var_dump($x);
分步解释
array_column($item, 'b'):遍历每一级子数组,提取所有内层数组中'b'键对应的值,得到一个字符串数组(比如第一级会得到['two', 'four'],第二级得到['six', 'eight'])。in_array('six', ...):判断提取出的'b'值数组中是否包含'six',返回布尔值。array_map(...):对$arr的每一级元素执行上述判断,生成一个由布尔值组成的新数组(比如[false, true])。array_search(true, ...):在布尔值数组中找到第一个true的位置,也就是目标一级索引值。
另一种实现方式(先过滤再取索引)
如果需要更清晰的步骤,也可以先过滤出符合条件的一级数组,再获取其索引:
// 过滤出包含'b'='six'的一级数组 $matchedGroups = array_filter($arr, fn($group) => in_array('six', array_column($group, 'b'))); // 获取第一个匹配项的索引 $targetIndex = array_keys($matchedGroups)[0]; // 取出目标数组 $x = $arr[$targetIndex]; var_dump($x);
注意:如果$arr中存在多个符合条件的一级数组,上述方法会返回第一个匹配项的索引;如果没有匹配项,array_search会返回false,此时$arr[false]会等价于$arr[0],建议提前判断是否存在匹配项避免错误。
内容的提问来源于stack exchange,提问作者jamacoe
相关产品推荐
相关产品推荐

