PHP - array_diff一个多维数组和一个平面数组

时间:2016-09-13 11:29:22

标签: php arrays multidimensional-array

我有两个数组。其中一个是多维数组,例如

 $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中删除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但我不确定如何使用它,在这种情况下,我有一个多维数组和一个平面数组。

4 个答案:

答案 0 :(得分:4)

使用array_filter()

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

答案 1 :(得分: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>';

我希望这有助于实现目标

答案 2 :(得分:0)

使用in_array()

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

答案 3 :(得分:0)

  

无需不必要地遍历您的$missingItems阵列。

     

in_array()可以解决问题。

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