You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:03