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

PHP循环输出投票选项时如何按得票数从高到低排序选项

实现方案

你可以在原有逻辑基础上新增一步排序处理即可实现,不需要大幅修改现有代码:

  1. 先遍历原数组把选项、对应得票数、得票占比整合为一个联合数组
  2. 用PHP内置的usort()方法按得票数做降序排序
  3. 遍历排序后的数组输出进度条即可

完整代码示例

<?php
// 此处的$sum是你之前已经计算好的总票数,如果之前没算可以加下面这行先统计总票数
$sum = array_sum($pollAnswerSet["answers"]);

// 整合选项和对应投票数据
$sortedPollData = [];
foreach ($poll["options"] as $optionKey => $option) {
    $currentVote = $pollAnswerSet["answers"][$optionKey];
    $sortedPollData[] = [
        'option_content' => $option,
        'vote_count' => $currentVote,
        'percentage' => $sum == 0 ? 0 : floor($currentVote / $sum * 100)
    ];
}

// 按得票数从高到低排序
usort($sortedPollData, function($itemA, $itemB) {
    return $itemB['vote_count'] - $itemA['vote_count'];
});

// 循环输出排序后的进度条
foreach ($sortedPollData as $item) {
?>
<div>
    <div class='progress-bar' style="width:<?= $item['percentage'] ?>%;"></div>
    <?= $item['percentage'] ?>%
    <!-- 如需展示选项内容可以加这行:<?= $item['option_content'] ?> -->
</div>
<?php } ?>

可选优化

如果遇到得票数相同的场景需要自定义排序规则,可以修改usort的回调函数,比如相同票数按选项名称正序排列:

usort($sortedPollData, function($itemA, $itemB) {
    if ($itemA['vote_count'] == $itemB['vote_count']) {
        return strcmp($itemA['option_content'], $itemB['option_content']);
    }
    return $itemB['vote_count'] - $itemA['vote_count'];
});

如果需要保留原始选项数组的键名,可以把usort替换为uasort,不会破坏原数组的键关联关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:24:04