我使用以下方法从simpleXML字符串创建一个二维数组,到目前为止效果良好:
$dataRaw = array();
foreach($objRanking->history as $history) { if($history->groupName == "currentMonth") {
$dataRaw[(string)$history->groupName->item] = (int)$history->groupName->groupCount;
}}
阵列如下所示:
Array ( [item1] => 2 [item2] => 3 [item3] => 5 [item4] => 7 [item5] => 11 [item6] => 13 [item7] => 17 [item8] => 19 [item9] => 23 [item10] => 29 [item11] => 31 [item12] => 37 )
有没有一种方法可以将其限制为数组中最多10个项目,然后将所有剩余项目总结为[其他],并将其值作为剩余值的总和?
非常感谢你的帮助,迈克。
$dataRaw
中。当计数器值大于10时,开始将它们添加到新数组中(此处为$restOfTheItems
)。循环完成后,您可以简单地创建一个新索引,对数组值求和并进行赋值
$dataRaw = array();
$restOfTheItems = array();
$i = 0;
foreach($objRanking->history as $history) {
if($i <= 10) {
if($history->groupName == "currentMonth") {
$dataRaw[(string)$history->groupName->item] = (int)$history->groupName->groupCount;
}
} else {
$restOfTheItems[] = (int)$history->groupName->groupCount;
}
$i++;
}
$dataRaw['Others'] = array_sum($restOfTheItems);
当然。要在将数组一分为二之后执行此操作,请总结第二个块并将其附加到第一个块:
if (count($dataRaw) > 10) {
$firstTen = array_slice($dataRaw, 0, 10, true);
$others = array_slice($dataRaw, 10, null, true);
$dataRaw = $firstTen;
$dataRaw['Others'] = array_sum($others);
}
你当然也可以在初始处理过程中这样做:
foreach($objRanking->history as $history) {
if($history->groupName == "currentMonth") {
$groupCount = (int)$history->groupName->groupCount;
switch(count($dataRaw)) {
case 11:
// we already have "Others", so sum the counts
$dataRaw['Others'] += $groupCount;
break;
case 10:
// we already have 10 items, so add "Others"
$dataRaw['Others'] = $groupCount;
break;
default:
// less than 10 existing items, add one
$dataRaw[(string)$history->groupName->item] = $groupCount;
break;
}
}
}