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
相关产品推荐
相关产品推荐

