PHP中关于排名和显示的问题

发布于:2024-08-08 ⋅ 阅读:(25) ⋅ 点赞:(0)

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  PHP中关于排名和显示的问题;这个代码不知道哪里有问题,显示的时候,少了1个人,如图:

我想要的是,显示还是按照第一列顺序order来依次显示,但是需要有一个排名的赋值(这个是根据record_1来进行排名的)

<?php
$stmtSelect = $pdo->prepare("
                        SELECT *
                        FROM m_order
                        WHERE
                            `game` = ? AND
                            `m_name` = ? AND
                            `station` = ? AND
                            `group` = ? AND
                            `event` = ? AND
                            `schedule` = ?
                        ORDER BY `order` ASC
                        ");
$stmtSelect->execute([$game, $m_name, $station, $group, $event, $schedule]);
 
$order_in = $stmtSelect->fetchAll(PDO::FETCH_ASSOC);
 
$record_1_values = [];
 
foreach ($order_in as $row) {
    $record_1 = (int)$row['record_1'];
    if ($record_1 !== 0 && !empty($record_1)) { 
        $record_1_values[] = $record_1;
    }
}
 
$ranks_1 = [];
$current_rank_1 = 1;
$previous_record_1 = null;
 
asort($record_1_values);
 
foreach ($record_1_values as $index_1 => $record_1) {
    if ($record_1 != $previous_record_1) {
 
        $current_rank_1 = count($ranks_1) + 1;
    }
    $ranks_1[$index_1] = $current_rank_1;
    $previous_record_1 = $record_1;
}
 
$record_1_to_rank_map = array_combine($record_1_values, $ranks_1);
 
foreach ($order_in as $index_1 => &$row) {
    $record_1 = (int)$row['record_1'];
    if (isset($record_1_to_rank_map[$record_1])) {
 
        $row['record_1'] = $record_1;
        $row['record_0'] = $record_1_to_rank_map[$record_1];
    } else {
 
        $row['record_1'] = $record_1;
        $row['record_0'] = null;
    }
}
foreach ($order_in as $row): ?>
 
                    <tr align="center" style="font-weight:bold;font-size:10px;">
                        <td><?php echo htmlspecialchars($row['order']); ?></td>
                        <td><?php echo htmlspecialchars($row['check']); ?></td>
                        <td><a style="font-size:13px"><?php echo htmlspecialchars($row['bib']); ?></a></td>
                        <td><?php echo htmlspecialchars($row['name']); ?><br>
                        <a style="font-size:8px;color:#8a8a8a"><?php echo htmlspecialchars($row['delegation']); ?></a></td>
                        <td><a style="color:#4d88e0">
                            <?php 
                            if ($row['record_1'] >= 9999990 ){
                                echo ""; 
                            } else{
                                echo htmlspecialchars($row['record_1']); 
                            }
                            ?>
                        </a></td>
                        <td><a style="color:#4d88e0"><?php echo htmlspecialchars($row['warn']).htmlspecialchars($row['penalty_1']); ?></a></td>
                        <td><a style="color:#4d88e0"><?php echo htmlspecialchars($row['result_1']); ?></a></td>
                        <td><span style="width:20px;background:#3d77b3"><a style="color:#FFF"><?php echo htmlspecialchars($row['record_0']); ?></a></span></td>
                        <td><?php echo htmlspecialchars($row['remark']); ?></td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </select>

友情提示:
  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

解决方案

  如下是上述问题的解决方案,仅供参考:

  在您的代码中,排名逻辑似乎是正确的,但是可能存在几个问题导致显示时少了一个人。以下是一些可能的问题和相应的解决方案:

  1. 数据筛选

    • 确保$order_in数组中的每个元素都经过了排名处理。如果$record_1为0或空,这些行可能没有被包含在排名中。
  2. 排名映射

    • 在创建$record_1_to_rank_map映射时,确保映射正确。如果$record_1_values数组中的值是唯一的,那么映射应该是正确的。如果存在重复的record_1值,映射可能不会按预期工作。
  3. 排名更新逻辑

    • $record_1值不是前一个值时,您将排名设置为count($ranks_1) + 1。如果$record_1_values数组中存在重复值,这可能导致排名不正确。您可能需要在排名时考虑相等的record_1值。
  4. 数据更新

    • 在更新$order_in数组时,确保所有元素都被更新了排名。如果$record_1_to_rank_map映射中没有对应的排名,您将record_0设置为null。这可能意味着某些行没有被正确处理。
  5. 数据一致性

    • 检查数据库中的数据是否一致,特别是record_1字段的值。
  6. 排名显示

    • 检查排名显示的逻辑是否正确。在您的代码中,排名显示在record_0字段,确保这个字段被正确填充。
  7. 错误检查

    • 检查是否有任何错误或警告在PHP错误日志中,这可能会提供一些线索。
  8. 调试

    • 在输出结果之前,添加一些调试语句来打印$order_in数组和$ranks_1数组,以确保它们包含预期的数据。
  9. 数组键的一致性

    • 确保在更新$order_in数组时,使用的键与原始数组中的键一致。
  10. 排序稳定性

    • 如果asort函数导致原始顺序丢失,您可能需要使用usort并提供一个自定义的排序函数来保持原始顺序。

  这里是一个简化的代码示例,您可以使用它来调试和检查排名逻辑:

// ...之前的代码...

// 打印原始数据以进行调试
echo "<pre>";
print_r($order_in);
echo "</pre>";

// ...排名逻辑...

// 打印排名映射以进行调试
echo "<pre>";
print_r($record_1_to_rank_map);
echo "</pre>";

// ...更新$order_in数组的代码...

// 打印更新后的数据以进行调试
echo "<pre>";
print_r($order_in);
echo "</pre>";

// ...HTML输出代码...

  通过添加这些调试语句,您可以在浏览器中查看原始数据、排名映射和更新后的数据,以帮助您确定问题所在。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。



网站公告

今日签到

点亮在社区的每一天
去签到