PHP多维数组搜索指定值,目标列也为数组时如何获取对应键
解决方案
你原来的写法失效是因为array_column提取出来的score列现在都是数组类型,array_search默认做的是简单值比较,自然没法匹配到数组里的元素。可以用下面两种方案解决:
方案1:foreach遍历(性能最优,可读性高)
直接遍历外层数组,逐个检查score数组是否包含目标值,找到就直接返回对应键:
// 要搜索的目标值 $targetScore = '200'; $matchedKey = null; foreach ($myArray as $key => $item) { if (in_array($targetScore, $item['score'])) { $matchedKey = $key; break; // 只找第一个匹配项就加break,要找所有匹配项就删除这行,把key存入结果数组 } }
执行后$matchedKey就是匹配元素的索引,没有匹配结果就是null。
方案2:内置函数一行实现(和原有写法风格统一)
用array_map把每个score数组转换成「是否包含目标值」的布尔值,再用array_search找第一个匹配的键:
$targetScore = '200'; $matchedKey = array_search(true, array_map( fn($scores) => in_array($targetScore, $scores), array_column($myArray, 'score') ));
这个写法的返回规则和你原来的代码完全一致:找到就返回对应索引,没找到返回false。
兼容新旧数据格式
如果业务中还存在score是单值的旧数据,可以加个类型判断适配两种场景:
$targetScore = '200'; $matchedKey = array_search(true, array_map( function($scoreVal) use ($targetScore) { return is_array($scoreVal) ? in_array($targetScore, $scoreVal) : $scoreVal == $targetScore; }, array_column($myArray, 'score') ));
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

