我有一个这种结构的数组:
Array ( [0] => Array ( [0] => Array ( [year] => 2014 [weeknumber] => 1 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) [1] => Array ( [year] => 2014 [weeknumber] => 2 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) [2] => Array ( [year] => 2014 [weeknumber] => 3 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) ) [1] => Array ( [0] => Array ( [year] => 2014 [weeknumber] => 1 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) [1] => Array ( [year] => 2014 [weeknumber] => 2 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) [2] => Array ( [year] => 2014 [weeknumber] => 3 [foo1] => 1 [foo2] => 2 [foo3] => 3 ) ) )
我用这个函数计算子元素:
$final = array(); foreach($array as $index1 => $sub_array1) { $i = 0; foreach($sub_array1 as $index2 => $final_sub_array) { $wn = $final_sub_array['weeknumber']; $year = $final_sub_array['year']; unset($final_sub_array['year']); unset($final_sub_array['weeknumber']); foreach($final_sub_array as $key => $value) { if(isset($final[$i][$key])) { $final[$i][$key] += $value; } else { $final[$i][$key] = $value; } $final[$i]['kw'] = $wn; $final[$i]['jahr'] = $year; } $i++; } }
只有$ final_sub_array始终具有相同数量的元素时,该脚本才有效。 但是如果一个arrray只有1个或2个元素而其他元素有更多元素,则它不再有效。我该如何解决这个问题? 所有具有相同年份和相同周数的条目必须加在一起。
以下是要使用的代码:
<?php
$var =
array (
113 =>
array (
0 =>
array (
'id' => '1537',
'kw' => '22',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '113',
),
1 =>
array (
'id' => '1541',
'kw' => '23',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '113',
),
2 =>
array (
'id' => '1543',
'kw' => '24',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '113',
),
),
114 =>
array (
0 =>
array (
'id' => '1538',
'kw' => '22',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '114',
),
1 =>
array (
'id' => '1540',
'kw' => '23',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '114',
),
2 =>
array (
'id' => '1544',
'kw' => '24',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '114',
),
),
115 =>
array (
0 =>
array (
'id' => '1539',
'kw' => '22',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '115',
),
1 =>
array (
'id' => '1542',
'kw' => '23',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '115',
),
2 =>
array (
'id' => '1545',
'kw' => '24',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '115',
),
),
116 =>
array (
0 =>
array (
'id' => '1546',
'kw' => '24',
'jahr' => '2014',
'anzahl_betten' => '10',
'zugange_dauerpflege' => '0',
'zugange_kurzzeitpflege' => '0',
'abgange_dauerpflege_sterbefalle' => '0',
'abgange_dauerpflege_auszuge' => '0',
'abgange_kurzzeitpflege' => '0',
'wechsel_kurz_dauer' => '0',
'anzahl_tage' => '0',
'geplante_einzuge' => '0',
'hID' => '116',
),
),
);
foreach($var as $index1 => $sub_array1)
{
$i = 0;
foreach($sub_array1 as $index2 => $final_sub_array)
{
$kw = $final_sub_array['kw'];
$jahr = $final_sub_array['jahr'];
unset($final_sub_array['id']);
unset($final_sub_array['kw']);
unset($final_sub_array['jahr']);
unset($final_sub_array['hID']);
foreach($final_sub_array as $key => $value)
{
if(isset($final[$i][$key])) {
$final[$i][$key] += $value;
}
else {
$final[$i][$key] = $value;
}
$final[$i]['kw'] = $kw;
$final[$i]['jahr'] = $jahr;
}
$i++;
}
}
echo '<pre>';
print_r($final);
echo '</pre>';
?>
如果用键116删除最后一个数组,一切正常。但有了它,它会使kw 24增加一倍并且计算错误。
答案 0 :(得分:0)
我认为这可能是你想要的。它使用$kw
作为最终数组的键,而不是$i
,因此它将子数组与相同的kw
值组合在一起。不过,我对你在jahr
所做的事情感到有些困惑。如果有相同kw
但不同jahr
的条目,则最终结果将包含最后一个jahr
。
foreach($var as $index1 => $sub_array1)
{
foreach($sub_array1 as $index2 => $final_sub_array)
{
$kw = $final_sub_array['kw'];
$jahr = $final_sub_array['jahr'];
unset($final_sub_array['id']);
unset($final_sub_array['kw']);
unset($final_sub_array['jahr']);
unset($final_sub_array['hID']);
foreach($final_sub_array as $key => $value)
{
if(isset($final[$kw][$key])) {
$final[$kw][$key] += $value;
}
else {
$final[$kw][$key] = $value;
}
$final[$kw]['kw'] = $kw;
$final[$kw]['jahr'] = $jahr;
}
$i++;
}
}
顺便说一句,如果这是来自数据库查询,那么您似乎可以使用SUM(col1+col2+col3...) ... GROUP BY kw
让数据库为您完成所有求和。