我有数组,不想对某些值进行分组。 我的输入数组:
$input =
(
[0] => Array (
[shipping] => Array
(
[ups] => Array
(
[0] => Array
(
[name] => Next Day Air (early AM)
[code] => 14
[price] => 110.00
)
[1] => Array
(
[name] => Next Day Air
[code] => 01
[price] => 105.25
)
)
)
)
[1] => Array (
[shipping] => Array
(
[ups] => Array
(
[0] => Array
(
[name] => Next Day Air (early AM)
[code] => 14
[price] => 120.00
)
[1] => Array
(
[name] => Next Day Air
[code] => 01
[price] => 105.50
)
)
)
)
);
我正试图得到这样的东西:
$shipping_group = array (
[ups] => Array
(
[0] => Array
(
[name] => Next Day Air (early AM)
[code] => 14
[price] => 230.00
)
[1] => Array
(
[name] => Next Day Air
[code] => 01
[price] => 210.75
)
)
);
我尝试过:
$shipping_ups_total = array();
foreach($input as $box) {
$box = (object)$box;
if (!empty($box->shipping['ups'])) {
foreach($box->shipping['ups'] as $m=>$method) {
$price += $method['price'];
$shipping_ups_total[$m] = array(
'name' => $method['name'],
'code' => $method['code'],
'price' => $price
);
}
}
}
但我的结果错了......
答案 0 :(得分:1)
如果要通过code
索引值对它们进行分组,请使用该值作为键进行分组。使用它来分组和聚合所需的值。 (在这种情况下,价格)。
首先只是初始化一个容器,然后在循环中不断添加+=
:
$shipping_group['ups'] = array();
foreach($input as $box) {
foreach($box['shipping']['ups'] as $ups) {
// initialize
$code = $ups['code']; // create your key
if(!isset($shipping_group['ups'][$code])) {
// initialize initial container, start the price from zero
$shipping_group['ups'][$code] = array('name' => $ups['name'], 'code' => $code, 'price' => 0);
}
// after that, just continually add
$shipping_group['ups'][$code]['price'] += $ups['price'];
}
}
注意:这会将代码添加为主分组数组中的键。
如果您想要解决这个问题,请使用array_values
:
$shipping_group['ups'] = array_values($shipping_group['ups']);
答案 1 :(得分:0)
我想像这样嵌套的东西会起作用。
循环提供的每个阵列。循环内部数组。循环发货信息并将发货类型(索引)推送到shipping_groups
阵列。该值将是该数组中的信息。
$shipping_groups = array();
foreach($input as $arr){
foreach($arr as $details){
foreach($details as $shipping_type => $info){
$shipping_types[$shipping_type]['price'] = number_format($info['price'] + $shipping_types[$shipping_type]['price'], 2, '.',',');
}
}
}
并且会生成以下内容,请注意我的数据不会完全反映您的数据,但结构上是正确的:
array(3) {
["ups"]=>
array(1) {
["price"]=>
string(6) "114.37"
}
["fedex"]=>
array(1) {
["price"]=>
string(5) "87.18"
}
["dhl"]=>
array(1) {
["price"]=>
string(5) "61.47"
}
}