PHP:填充数组时将项限制为10


PHP: limit items to 10 when filling an array

我使用以下方法从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个项目,然后将所有剩余项目总结为[其他],并将其值作为剩余值的总和?

非常感谢你的帮助,迈克。

初始化一个计数器,并在每次迭代中不断递增。在每次迭代中,检查计数器是否低于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;
        }
    }
}