我想按part_no分组,最后显示带销售总额的部件号。
Array
(
[0] => Array
(
[part_no] => 04152-yzza4
[sale_qty] => 1
)
[1] => Array
(
[part_no] => 04465-YZZR3
[sale_qty] => 12
)
[2] => Array
(
[part_no] => 04152-yzza1
[sale_qty] => 3
)
[3] => Array
(
[part_no] => 04465-YZZR3
[sale_qty] => 1
)
[4] => Array
(
[part_no] => 04465-YZZR3
[sale_qty] => 1
)
)
输出应为:
04152-yzza4:1
04465-YZZR3:14
04152-yzza1:3
我尝试过函数和类,但对我没有任何帮助,请帮忙
答案 0 :(得分:1)
一个简单的foreach
循环可以做到这一点:
<?php
$input = [
['part_no'=>'test1','sale_qty' => 4],
['part_no'=>'test1','sale_qty' => 2],
['part_no'=>'test2','sale_qty' => 1],
['part_no'=>'test3','sale_qty' => 3],
];
$output = [];
foreach($input as $i) {
if(!isset($output[$i['part_no']])) {
$output[$i['part_no']] = 0;
}
$output[$i['part_no']] += $i['sale_qty'];
}
var_dump($output);
输出
array(3){ [“ test1”] => 整数(6) [“ test2”] => 整数(1) [“ test3”] => 整数(3) }
参考文献:
答案 1 :(得分:0)
您可以使用这种怪物:
$array = array(
0 =>
array (
'part_no' => '04152-yzza4',
'sale_qty' => 1
),
1 =>
array (
'part_no' => '04465-YZZR3',
'sale_qty' => 12
),
2 =>
array (
'part_no' => '04152-yzza1',
'sale_qty' => 3
),
3 =>
array (
'part_no' => '04465-YZZR3',
'sale_qty' => 1
),
4 =>
array (
'part_no' => '04465-YZZR3',
'sale_qty' => 1
)
);
$t = [];
array_walk($array,function($v)use(&$t){($k=$v['part_no'])&&!isset($t[$k])?$t[$k]=$v['sale_qty']:$t[$k]+=$v['sale_qty'];});
print_r($t);
输出:
Array
(
[04152-yzza4] => 1
[04465-YZZR3] => 14
[04152-yzza1] => 3
)
未压缩版本
array_walk($array,
function($value) use (&$total){
$key = $value['part_no'];
if(!isset($total[$key])){
$total[$key] = $value['sale_qty'];
}else{
$total[$key] += $value['sale_qty'];
}
}
);
相同的输出
数组遍历的工作方式与foreach相似,因为它遍历或循环遍历数组,您可以使用数组映射,但这意味着回调将修改原始数组,在此我们不做介绍。相反,我们可以使用use()
关键字作为Closure并通过与号$total
的引用传递&
,每当我们为其分配值时,动态更新它(主要是因为我们可以不能从关闭中返回)。
其余的基本知识。
答案 2 :(得分:-1)
简单的foreach()
将完成以下工作:
$new = [];
foreach($arr as $v){
$new[$v['part_no']] = isset($new[$v['part_no']]) ? $new[$v['part_no']] + $v['qty'] : $v['qty'];
}