You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现从API多维数组获取含并列的前十射手榜单求助

解决射手前十榜单(含并列)的问题

嘿,看起来你的代码逻辑有点走偏了,导致返回了一大堆多余的条目。咱们换个更靠谱的思路:先把球员按进球数排序,再筛选出包含并列的前十榜单,这样就准确多了!

修正后的完整代码

function topTenGoalGetter() {
    // 获取API数据,顺便加个失败处理
    $json_file = @file_get_contents('https://www.openligadb.de/api/getgoalgetters/bl1/2018');
    if (!$json_file) {
        return []; // 如果API请求失败,返回空数组避免报错
    }
    $entries = json_decode($json_file, true);
    if (empty($entries)) {
        return [];
    }

    // 第一步:按进球数降序排序,进球数相同的话按姓名升序(可选,让结果更整齐)
    usort($entries, function($a, $b) {
        if ($a['GoalCount'] !== $b['GoalCount']) {
            return $b['GoalCount'] - $a['GoalCount']; // 进球数从高到低排
        }
        // 进球数一样时,按姓名拼音升序排,避免结果混乱
        return strcmp($a['Name'], $b['Name']);
    });

    // 第二步:确定前十榜单的最低进球数(处理并列情况)
    $top10_min_goal = null;
    $total_players = count($entries);
    if ($total_players >= 10) {
        $top10_min_goal = $entries[9]['GoalCount']; // 取排序后第10个球员的进球数(索引从0开始)
    } else {
        // 如果总球员数不足10,直接返回所有球员
        return $entries;
    }

    // 第三步:筛选所有符合门槛的球员
    $return_topten = [];
    foreach ($entries as $entry) {
        if ($entry['GoalCount'] >= $top10_min_goal) {
            $return_topten[] = $entry;
        } else {
            // 因为已经按降序排了,后面的进球数只会更小,直接跳出循环省时间
            break;
        }
    }

    return $return_topten;
}

对应的HTML部分可以稍微调整下显示文本:

<div class="bl-torschuetzen">
    <div class="bl-torschuetzen-entries">
        <span>德甲2018赛季射手前十榜单(含并列)</span>
        <pre>
            <?php var_dump(topTenGoalGetter());?>
        </pre>
    </div>
</div>

为啥原代码会出问题?

你的原逻辑是收集所有进球数,然后循环删掉最小的直到剩下10个数值,但这些数值可能重复很多次——比如如果第十名的进球数有10个球员,那这10个都会被加进来,再加上前面的球员,总条数就会远超10条。

新逻辑就不一样了:

  1. 先把所有球员按进球数从高到低排好序,确保顺序正确;
  2. 找到排序后第10个球员的进球数,这就是咱们的“准入门槛”;
  3. 把所有进球数大于等于这个门槛的球员都保留,遇到更低的直接停手(因为已经排好序了,后面的肯定更小)。

这样既保证了包含所有并列第十的球员,又不会多取无关的条目。

内容的提问来源于stack exchange,提问作者user3073688

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:15:34