in_array()在二维关联数组中无法正常工作的问题求助
解决多维数组中使用in_array()查找值的问题
首先得说,你遇到的问题核心是没意识到你的数组是多层嵌套的多维数组,你之前的三种写法都没定位到存放目标值556729685的正确层级,所以才会一直得不到正确结果。
先拆解下你的数组结构:目标值556729685是在$array['cart_item'][0]['product_auto_id']这个位置,属于第三层级的字段,而你之前的写法都是在第一层级的键或值里查找,肯定找不到。
为什么你的三种写法都不对?
in_array(556729685, array_keys($array)):array_keys($array)只会返回第一层级的键,也就是['cart_item'],完全和目标值不沾边。in_array(556729685, array_values($array)):array_values($array)返回的是第一层级的值,也就是整个cart_item对应的二维数组,in_array默认不会递归遍历二维数组里的子元素,所以找不到单个数值。in_array(556729685, $array):和上面类似,$array的元素是cart_item对应的二维数组,同样不会深入子数组查找,自然找不到目标值。
三种可行的解决方法
1. 精准提取目标字段后查找(推荐)
既然你明确知道目标值存放在每个购物车项的product_auto_id字段里,直接用array_column提取所有该字段的值,再用in_array查找,这种方式最高效:
// 提取cart_item数组中所有product_auto_id的值 $productIds = array_column($array['cart_item'], 'product_auto_id'); // 严格检查值是否存在(第三个参数true开启严格类型匹配) if (in_array(556729685, $productIds, true)) { echo "值556729685存在于数组中"; } else { echo "值556729685不存在"; }
2. 递归遍历所有层级查找
如果你不确定目标值的具体层级,或者数组结构可能变化,可以用array_walk_recursive遍历所有层级的元素:
$exists = false; array_walk_recursive($array, function($value) use (&$exists) { if ($value === 556729685) { $exists = true; } }); if ($exists) { echo "值存在"; } else { echo "值不存在"; }
这种方式会遍历数组的所有层级,不管值在哪个位置都能找到,但如果数组很大,效率会比第一种方法低。
3. 手动循环遍历(适合额外操作商品数据)
如果你需要在找到值的同时获取对应的商品信息(比如商品名称、数量等),手动循环会更灵活:
$exists = false; $targetItem = null; foreach ($array['cart_item'] as $item) { if ($item['product_auto_id'] === 556729685) { $exists = true; $targetItem = $item; break; // 找到后立即跳出循环,提升效率 } } if ($exists) { echo "值存在,对应的商品是:" . $targetItem['product_name']; } else { echo "值不存在"; }
总结
优先用第一种方法,因为它最贴合你的数组结构,效率最高;如果数组结构不确定,再考虑递归遍历;需要额外操作商品数据的话,手动循环是更好的选择。
内容的提问来源于stack exchange,提问作者Santosh Khatri
相关产品推荐
相关产品推荐

