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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:27:32