我在尝试使用php中的多个值对数组进行分组时遇到了问题...
给出如下数组:
$in[] = array('year' => '2010', 'month' => '11', 'grupo' => '2', 'quantity' => 3);
$in[] = array('year' => '2010', 'month' => '11', 'grupo' => '3', 'quantity' => 4);
$in[] = array('year' => '2011', 'month' => '2', 'grupo' => '2', 'quantity' => 4);
$in[] = array('year' => '2011', 'month' => '2', 'grupo' => '2', 'quantity' => 4);
$in[] = array('year' => '2012', 'month' => '3', 'grupo' => '4', 'quantity' => 3);
$in[] = array('year' => '2012', 'month' => '3', 'grupo' => '4', 'quantity' => 3);
我想得到:
$out[] = array('year' => '2010', 'month' => '11', 'grupo' => '2', 'quantity' => 3);
$out[] = array('year' => '2010', 'month' => '11', 'grupo' => '3', 'quantity' => 4);
$out[] = array('year' => '2011', 'month' => '2', 'grupo' => '2', 'quantity' => 8);
$out[] = array('year' => '2012', 'month' => '3', 'grupo' => '4', 'quantity' => 6);
我尝试过这样的事情:
$out = array();
foreach ($in as $row) {
if (!isset($out[$row['year']['month']['grupo']])) {
$out[$row['year']['month']['grupo']] = array(
'year' => $row['year'],
'month' => $row['month'],
'grupo' => $row['grupo'],
'quantity' => 0,
);
}
$out[$row['year']['month']['grupo']]['quantity'] += $row['quantity'];
}
$out = array_values($out);
但它失败了,有3个组字段。
如果有人可以帮助我,那将是非常令人沮丧的!
答案 0 :(得分:1)
试试这个:
$out = array();
foreach ($in as $row) {
if(! isset($out[$row['year']][$row['month']][$row['grupo']])) {
$out[$row['year']][$row['month']][$row['grupo']]=0;
}
$out[$row['year']][$row['month']][$row['grupo']] += $row['quantity'];
}
print_r($out);
它将输出您想要的值,但是作为多维值数组,而不是具有key =>的平面数组;价值对:
Array
(
[2010] => Array
(
[11] => Array
(
[2] => 3
[3] => 4
)
)
[2011] => Array
(
[2] => Array
(
[2] => 8
)
)
[2012] => Array
(
[3] => Array
(
[4] => 6
)
)
)
但你可以重新安排阵列:
$out2 = array();
foreach($out as $year => $year_array) {
foreach($year_array as $month => $month_array) {
foreach($month_array as $grupo => $quantity) {
$out2[] = array('year' => $year, 'month' => $month, 'grupo' => $grupo, 'quantity' => $quantity);
}
}
}
print_r($out2);
这将输出:
Array
(
[0] => Array
(
[year] => 2010
[month] => 11
[grupo] => 2
[quantity] => 3
)
[1] => Array
(
[year] => 2010
[month] => 11
[grupo] => 3
[quantity] => 4
)
[2] => Array
(
[year] => 2011
[month] => 2
[grupo] => 2
[quantity] => 8
)
[3] => Array
(
[year] => 2012
[month] => 3
[grupo] => 4
[quantity] => 6
)
)
答案 1 :(得分:0)
这将保留值并给出总和。
foreach($in as $row) {
$out[$row['year']][$row['month']][$row['grupo']]['quantity'][] = $row['quantity'];
$out[$row['year']][$row['month']][$row['grupo']]['sum'] = array_sum($out[$row['year']][$row['month']][$row['grupo']]['quantity']);
}
print_r($out);
<强> GIVES 强>
Array
(
[2010] => Array
(
[11] => Array
(
[2] => Array
(
[quantity] => Array
(
[0] => 3
)
[sum] => 3
)
[3] => Array
(
[quantity] => Array
(
[0] => 4
)
[sum] => 4
)
)
)
[2011] => Array
(
[2] => Array
(
[2] => Array
(
[quantity] => Array
(
[0] => 4
[1] => 4
)
[sum] => 8
)
)
)
[2012] => Array
(
[3] => Array
(
[4] => Array
(
[quantity] => Array
(
[0] => 3
[1] => 3
)
[sum] => 6
)
)
)
)