2016-09-13 93 views
1

我有两个数组。其中之一是多维阵列,例如PHP - array_diff一个多维数组和一个平面数组

$products = array(
     0 => array(
      'product_id' => 33, 
      'variation_id' => 0, 
      'product_price' => 500.00 
     ), 
     1 => array(
      'product_id' => 45, 
      'variation_id' => 0, 
      'product_price' => 600.00 
     ), 
2 => array(
      'product_id' => 48, 
      'variation_id' => 0, 
      'product_price' => 600.00 
     ), 
     3 => array(
      'product_id' => 49, 
      'variation_id' => 0, 
      'product_price' => 600.00 
     ) 
    ); 

,我有一个平坦的阵列

$missingItems= array(49,33); 

我想从$删除项目的产品,他们的product_id是在阵列missingItems字符串。

$diff = array(); 
foreach ($missingItems as $missingItem) { 
    foreach ($products as $product) { 
     if($missingItem != $product['product_id']){ 
      $diff[] = $missingItem; 
     }  
    } 
} 
echo '<pre>'; 
print_r($diff); 
echo '</pre>'; 

当我这样做时,所有的值都被重复多次。例如如果我在我的第一个数组中有4个项目,而我的第二个项目中有两个。共有8个结果。我只想出现2个,即不存在于第二个数组中的那些。

当我有两个平面阵列我使用array_diff,但我不知道如何使用它在这种情况下,我有一个多维数组和平面数组。

+0

在你的输出阵列,它应该返回与主键1和2的多维阵列?并删除0和3? –

回答

4

使用array_filter()

$filtered = array_filter($products, function($product) use ($missingItems){ 
    return !in_array($product['product_id'], $missingItems); 
}); 
+2

这是最紧凑和最新颖的方法。做得太好了! :) –

1

可以使用in_array()检查,并作出新的阵列

$diff = array(); 
foreach ($products as $product) { 
    if(!in_array($product['product_id'], $missingItems)){ 
    $diff[] = $product; 
    } 
} 
echo '<pre>'; 
print_r($diff); 
echo '</pre>'; 

我希望这将有助于实现你的目标

0

使用in_array ()

$diff = array(); 
foreach ($products as $product) { 
    if(!in_array($product['product_id'], $missingItems)){ 
    $diff[] = $product; 
    } 
} 
0

没有必要不必要地遍历您的$missingItems阵列。

in_array()有窍门。

foreach ($products as $k => $product) { 
    if (in_array($product['product_id'], $missingItems)) { 
     unset($products[$k]); 
    }  
}