我有一个名为$PRODUCTS_LIST的数组,它填充了数据,结构如下:
$products_list[] = [
'manufacturer' => $manufacturer_name,
'mpn' => $mpn,
'description' => $description,
'quantity' => $quantity,
'condition' => $condition,
'price' => $price
];
如果数组中的值具有相同的描述和条件,我正在尝试从数组中删除任何重复值,并合并重复值中的数量。
我尝试将数据设置为临时数组,以便能够将两个数组比较为foreach语句。类似这样的事情:
foreach($products_list as $key => $row) {
if($test_data['description'] == $row['description'] && $test_data['isbn'] == $isbn)
{
echo $row['description'];
echo $row['quantity']+$temp_quantity;
}
$test_data = [
'description' => $row['description'],
'isbn' => $row['isbn'],
'quantity' =>
];
}
不是从原始数组中删除,而是创建一个新的数组,用唯一的值填充该数组。
<?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"
}
}
*/
这里有一个解决方案:
$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 ) )
问题内容: 我们可以在php中从单个多维数组中删除重复项,是否可以与多维数组一起使用?它对我不起作用! 这是数组的样子 任何人都可以帮助我… 问题答案: 用户在array_unique页面上的评论确实对此有所启发。您很可能会在这些注释中找到一些隐藏的宝石- 这是非常方便的文档。 只需快速浏览器,便可以了解以下内容,以从多维数组中删除重复项:
问题内容: 嗨,我正在尝试合并两个数组,并且还想从最终数组中删除重复的值。 这是我的数组1: 这是我的数组2: 我用于将两个数组合并为一个数组。它正在给出这样的输出 我要删除这些重复的条目,或者在合并之前删除它们…请帮助。.谢谢!!! 问题答案: http://se2.php.net/manual/zh/function.array- unique.php
问题内容: 我有两个JavaScript数组: 我希望输出为: 输出数组应删除重复的单词。 如何在JavaScript中合并两个数组,以使每个数组中的唯一项按插入原始数组中的相同顺序获得? 问题答案: 仅合并数组(不删除重复项) ES5版本使用: ES6版本使用解构 由于没有“内置”方式来删除重复项ECMA-262实际上有这样做的好处),因此我们必须手动进行: 然后,使用它: 这也将保留数组的顺序
问题内容: 所以这让我很困扰。 我有两个数组: 现在,我想比较这两个数组,并删除所有重复的值。 最后,我想要这两个数组,但其中没有’demo’和’some’值。 我想从具有相同索引键和值的array-s中删除所有值。 数组将始终具有相同数量的值和索引,我只想比较它们并从它们中删除具有相同索引键和值的条目。 我现在正在做这样的事情: 这有效!但是我想知道还有其他方法吗?也许不使用foreach循环?
在mongodb中,我有一个集合,其中数组有重复的条目,如 我需要删除重复的数组,只保留唯一的数组值,如下所示。 最好的方法是什么 谢啦
问题内容: 如何从PHP中的数组中删除重复的值? 问题答案: 使用array_unique()。 例: