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

PHP如何检查多维数组子元素中是否存在指定值?

解决多维数组中子元素值的存在性检查问题

这个问题我太熟了!你遇到的核心问题是:in_array()只能检查一维数组里的直接元素,而你的$items是二维数组,每个元素都是包含language和translation的子数组,所以直接用in_array('en', $items)肯定找不到匹配项——它在找的是$items里有没有直接等于'en'的值,而不是子数组里的language字段。

下面给你两种实用的解决方法:

方法一:用array_column()提取字段后检查(推荐)

array_column()可以快速从二维数组中提取指定字段的所有值,生成一个一维数组,之后再用in_array()检查就没问题了。这种方法代码简洁,效率也高,适合PHP 5.5及以上版本(现在绝大多数环境都满足)。

修改后的代码如下:

foreach($arr as $items){ 
    // 从当前$items数组中提取所有language字段的值,生成一维数组
    $availableLanguages = array_column($items, 'language');
    
    // 检查'en'是否在可用语言列表中
    if( in_array('en', $availableLanguages) ){ 
        foreach($items as $item){ 
            // 只有当当前$items中存在'en'语言时,才会执行这里的代码
            // 如果需要只针对'en'的元素做处理,可以再加一层判断:
            // if ($item['language'] === 'en') { ... }
        } 
    } 
}

方法二:手动遍历检查(兼容低版本PHP)

如果你的PHP版本低于5.5(这种情况很少见了),可以手动遍历一次$items,提前判断是否存在language为'en'的子元素:

foreach($arr as $items){ 
    $hasEnglish = false;
    
    // 先遍历一次,检查是否存在'en'语言
    foreach($items as $item){
        if ($item['language'] === 'en') {
            $hasEnglish = true;
            break; // 找到后立即停止循环,提升效率
        }
    }
    
    // 确认存在'en'后再执行内层循环
    if ($hasEnglish) {
        foreach($items as $item){ 
            // 执行你的内层代码逻辑
        } 
    } 
}

两种方法都能实现你的需求:只有当当前$items数组中存在language为'en'的子元素时,才会执行内层的foreach循环。

内容的提问来源于stack exchange,提问作者user759235

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:49