嘿伙计我有一个简单的问题。我有一个如下数组:
[0]=>
array(2) {
["id"]=>
string(3) "Prod ID"
["qty"]=>
string(1) "2"
}
现在这个数组包含来自给定人群的所有订单。这意味着产品ID将被列出一次以上。
我正在尝试将它们组合起来并增加数量,以便我可以针对销售的前5种产品提交报告。但我不知道如何实现这一目标,因为我是数组新手。
我尝试将其放入循环并将其设置为第二个数组,然后如果产品ID与现有数组中的产品ID匹配,则会将qty值一起添加。
任何帮助都会得到很多赞赏。
答案 0 :(得分:1)
通常,你在这里做的是你将它们分组到另一个数组并使用id循环它们,使它成为一个关键。分配键时,它会被正常推入,如果它已经存在,只需将现有数量添加到当前循环中的数量即可。例如:
$new_data = array();
foreach($data as $value) {
// simple initialization
if(!isset($new_data[$value['id']])) {
$new_data[$value['id']] = array('id' => $value['id'], 'qty' => 0);
}
// then sum up the quantity
$new_data[$value['id']]['qty'] += $value['qty'];
}
$new_data = array_values($new_data); // simple reindex
然后获得前5个,将其排序为先下降,获取切片数组以获得5。
usort($new_data, function($a, $b){
return $b['qty'] - $a['qty']; // sort descending
});
// get top 5
$top_5 = array_slice($new_data, 0, 5);
答案 1 :(得分:0)
使用此:
foreach ($arr as $value)
$newArr[$value['id']] = (isset($newArr[$value['id']])) ? $newArr[$value['id']] + $value['qty'] : $value['qty'] ;
这是一个如何做的例子:
$test = [
[
"id" => "1",
"qty" => "2"
],
[
"id" => "1",
"qty" => "2"
],
[
"id" => "2",
"qty" => "2"
],
[
"id" => "4",
"qty" => "1"
],
[
"id" => "2",
"qty" => "3"
],
[
"id" => "4",
"qty" => "1"
]
];
foreach ($test as $value)
$newArr[$value['id']] = (isset($newArr[$value['id']])) ? $newArr[$value['id']] + $value['qty'] : $value['qty'] ;
arsort($newArr);
print_r($newArr);
<强>输出强>
Array
(
[2] => 5
[1] => 4
[4] => 2
)
现在,id
为key
,qty
与此id
的总和为value
。它以 arsort 排序,因此您可以轻松处理信息。