我在这样的数组中有这个简单的数组,有N个嵌套数组
[
{
"period":"2014-07-16",
"test":1
},
{
"period":"2014-07-15",
"test2":1
},
{
"period":"2014-07-16",
"test2":47
}
]
我一直在努力(使用许多不同且同样失败的方法)合并具有相同周期的那些并且如果它们具有相同的第二个键(在这种情况下为test2),则将它们一起添加。如果没有,则将该键添加到数组中。
[
{
"period":"2014-07-16",
"test":1,
"test2":48
},
{
"period":"2014-07-15",
"test2":1
},
]
我最近的尝试是最接近我想要的(下面的代码)
// $datesArray is the first mentioned array of values.
// finalArray is an empty array that I want to push the final values into.
for ($i = 0; $i < count($datesArray) - 1; $i++) {
for ($j = $i; $j < count($datesArray); $j++) {
$key1 = array_keys($datesArray[$i]);
$key2 = array_keys($datesArray[$j]);
// First check to see if they have the same date, if they don't then no merging!
if ($datesArray[$i]['period'] == $datesArray[$j]['period']) {
if ($j == $i) {
array_push($finalArray, array(
'period' => $datesArray[$i]['period'],
$key1[1] => $datesArray[$i][$key1[1]]
));
} else {
if ($key1[1] == $key2[1]) {
array_push($finalArray, array(
'period' => $datesArray[$i]['period'],
$key1[1] => $datesArray[$i][$key1[1]] + $datesArray[$j][$key2[1]]
));
} else {
array_push($finalArray, array(
'period' => $datesArray[$i]['period'],
$key1[1] => $datesArray[$i][$key1[1]],
$key2[1] => $datesArray[$j][$key2[1]]
));
}
}
}
}
}
这产生了这个结果:
[
{
"period":"2014-07-16",
"test":1
},
{
"period":"2014-07-16",
"test":1,
"VeloxMorgana":47
},
{
"period":"2014-07-15",
"VeloxMorgana":1
}
]
编辑:我刚刚意识到我的代码无法使用N个不同的密钥,我需要它。啊。回到绘图板!
答案 0 :(得分:0)
尝试以下方法:
$finalArray = array();
foreach ($datesArray as $date) {
$pushed = false;
for ($i = 0; $i < count($finalArray); $i++) {
if($finalArray[$i]['period'] == $date['period']){
$key = array_keys($date);
$finalArray[$i][$key[1]] = $date[$key[1]];
$pushed = true;
break;
}
}
if(!$pushed) {
array_push($finalArray, $date);
}
}
if(!$pushed)
语句只会在第一次为真(因为$ finalArray没有元素,因此第二个for循环不会做任何事情)或者'period'值是新的。