我有一个名为 $products_list 的数组,里面装满了数据,结构如下:
return
如果它们具有相同的描述 && 条件,我试图从数组中删除任何重复值,并从重复中合并数量。
我试图将数据设置到一个临时数组中,以便能够将两个数组比较到一个 foreach 语句中。像这样:
$products_list[] = [
'manufacturer' => $manufacturer_name,
'mpn' => $mpn,
'description' => $description,
'quantity' => $quantity,
'condition' => $condition,
'price' => $price
];
答案 0 :(得分:2)
这是一个解决方案:
$products_list[] = [
'manufacturer' => 'manufacturer1',
'mpn' => 'mpn1',
'description' => 'desc',
'quantity' => 2,
'condition' => 'condition',
'price' => 10
];
$products_list[] = [
'manufacturer' => 'manufacturer1',
'mpn' => 'mpn1',
'description' => 'desc',
'quantity' => 3,
'condition' => 'condition',
'price' => 10
];
$products_list[] = [
'manufacturer' => 'manufacturer2',
'mpn' => 'mpn2',
'description' => 'desc2',
'quantity' => 4,
'condition' => 'condition2',
'price' => 15
];
$quantities = [];
foreach ( $products_list as $product ) {
$key = $product['description'].'|'.$product['condition']; // fields you want to compare
if ( !isset($quantities[$key]) ) {
$quantities[$key] = $product;
} else {
$quantities[$key]['quantity'] += $product['quantity'];
}
}
$products = array_values($quantities);
print_r($products);
结果是
Array ( [0] => Array ( [manufacturer] => manufacturer1 [mpn] => mpn1 [description] => desc [quantity] => 5 [condition] => condition [price] => 10 ) [1] => Array ( [manufacturer] => manufacturer2 [mpn] => mpn2 [description] => desc2 [quantity] => 4 [condition] => condition2 [price] => 15 ) )
答案 1 :(得分:1)
不要从原始数组中删除,而是创建一个新数组,用唯一值填充。
<?php
$products_list = [
[
'description' => 'foo',
'condition' => 'foobar',
],
[
'description' => 'foo',
'condition' => 'foobar',
],
[
'description' => 'hello',
'condition' => 'hi',
]
];
$uniques = [];
foreach ($products_list as $productItem) {
// loop through the uniques
// if the `description` and `condition` match an existing one, don't add it
foreach ($uniques as $uniqueItem) {
if ($productItem['description'] == $uniqueItem['description']
&& $productItem['condition'] == $uniqueItem['condition']
) {
// continue on both of the loops:
// 1) no need to loop over more unique items if you already found a match
// 2) continuing of the `$products_list` loop will result in not adding the `productItem` to `$uniques`
continue 2;
}
}
$uniques[] = $productItem;
}
var_dump($uniques);
/*
array(2) {
[0]=>
array(2) {
["description"]=>
string(3) "foo"
["condition"]=>
string(6) "foobar"
}
[1]=>
array(2) {
["description"]=>
string(5) "hello"
["condition"]=>
string(2) "hi"
}
}
*/