Php foreach给了我错误的结果
所以,我有两个多维数组,我通过foreach循环渲染两个数组,在嵌套的foreach中有3个条件 1-当两个数组的id匹配时,将新数组分配给空数组 2-当id从数组1与id数组2不匹配时,则为空数组分配一个新数组 3-如果数组2的id与数组1不匹配,则执行相同的操作 我在数组1中有19个数组,在数组2中有相同的数组,但它返回361个结果 任何帮助都将不胜感激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
$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进行比较,因此此条件似乎相同,但顺序相反,