Php foreach给了我错误的结果

Php foreach给了我错误的结果,php,json,Php,Json,所以,我有两个多维数组,我通过foreach循环渲染两个数组,在嵌套的foreach中有3个条件 1-当两个数组的id匹配时,将新数组分配给空数组 2-当id从数组1与id数组2不匹配时,则为空数组分配一个新数组 3-如果数组2的id与数组1不匹配,则执行相同的操作 我在数组1中有19个数组,在数组2中有相同的数组,但它返回361个结果 任何帮助都将不胜感激 $allProducts = array(); foreach ($shopifyProducts as $row) { for

所以,我有两个多维数组,我通过foreach循环渲染两个数组,在嵌套的foreach中有3个条件

1-当两个数组的id匹配时,将新数组分配给空数组

2-当id从数组1与id数组2不匹配时,则为空数组分配一个新数组

3-如果数组2的id与数组1不匹配,则执行相同的操作

我在数组1中有19个数组,在数组2中有相同的数组,但它返回361个结果 任何帮助都将不胜感激

$allProducts = array();

foreach ($shopifyProducts as $row)
{
    foreach ($db_Products as $subRow)
    {

        if ($row['id'] == $subRow['product_id'])
        {
            $allProducts[] = array('id' => $row['id'], 'status' => 'db+shopify');                   
        }

        else if ($row['id'] != $subRow['product_id'])
        {
            $allProducts[] = array('id' => $row['id'] ,'status' => 'not exist in db');              
        }

        else if ($subRow['product_id'] != $row['id'])
        {
            $allProducts = array('id' => $subRow['product_id'] , 'status' => 'not exist at shopify');                    
        }

    }
} 

此代码首先使用
array\u column()
创建两个由
id
索引的新数组,然后使用
isset()
在两个循环中使用这些数组,这比每次在数组中使用
要快得多

第一个循环检查shopify中的和,但不检查数据库,第二个循环检查数据库中的,但不检查shopify

$newArray1 = array_column($array1, null, "id");
$newArray2 = array_column($array2, null, "id");

$allProducts = array();
foreach  ( $array1 as $row )    {
    if ( isset ( $newArray2[$row['id']]) )  {
        $allProducts[] = array('id' => $row['id'], 'status' => 'db+shopify');
    }
    else    {
        $allProducts[] = array('id' => $row['id'] ,'status' => 'not exist in db'); 
    }
}

foreach  ( $array2 as $row )    {
    if ( !isset ( $newArray1[$row['id']]) )  {
        $allProducts[] = array('id' => $row['id'] ,'status' => 'not exist at shopify');
    }
}

根据我的理解,第二和第三种情况似乎是相同的…………主要问题是,在检查完整个
$db_产品之前,您无法判断是否存在匹配的元素。目前,您正在(有效地)进行交叉连接,其中为两个阵列的每一个组合生成一个输出。第二个和第三个略有不同,因为在第二个条件下,阵列1与阵列2进行比较,在第三个条件下,阵列2与阵列1进行比较,因此此条件似乎相同,但顺序相反,