//原数组
$arr = [
[
'id'=>1,
'shop'=>1,
'name'=>'娃哈哈',
'price'=>2
],
[
'id'=>2,
'shop'=>1,
'name'=>'法式小面包',
'price'=>1
],
[
'id'=>3,
'shop'=>1,
'name'=>'火腿肠',
'price'=>2
],
[
'id'=>4,
'shop'=>2,
'name'=>'伊利纯牛奶',
'price'=>2
],
[
'id'=>5,
'shop'=>2,
'name'=>'煎鸡蛋',
'price'=>2
],
[
'id'=>6,
'shop'=>3,
'name'=>'康师傅红烧牛肉面',
'price'=>5
]
];
//重构后
$res = [
[
'shop'=>1,
'price'=>5
],
[
'shop'=>2,
'price'=>4
],
[
'shop'=>3,
'price'=>5
]
];
求教,谢谢
$res = refactor($arr);
//重构
function refactor($arr){
//数组提纯
$arr = refine($arr);
//获取所有shop数组并去重
$shop = getShop($arr);
$res = [];
foreach ($shop as $k => $v) {
$res[$k]['shop'] = $v;
//根据shop累加price
$res[$k]['price'] = getPrice($v,$arr);
}
return $res;
}
//数组提纯用于循环时减少损耗
function refine($arr){
$res = [];
foreach ($arr as $k => $v) {
$res[$k]['shop'] = $v['shop'];
$res[$k]['price'] = $v['price'];
}
return $res;
}
//获取所有shop数组并去重
function getShop($arr){
$shop_arr = [];
foreach ($arr as $k => $v){
array_push($shop_arr,$v['shop']);
}
$shop_arr = array_unique($shop_arr);
return $shop_arr;
}
//根据shop累加price
function getPrice($shop,$arr){
$price = 0;
foreach ($arr as $k => $v){
if($shop == $v['shop']){
$price += $v['price']
}
}
return $price;
}