我有两个数组。其中一个是多维数组,例如
$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
但我不确定如何使用它,在这种情况下,我有一个多维数组和一个平面数组。
答案 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]);
}
}