🏆本文收录于《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>
友情提示:
如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。
解决方案
如下是上述问题的解决方案,仅供参考:
在您的代码中,排名逻辑似乎是正确的,但是可能存在几个问题导致显示时少了一个人。以下是一些可能的问题和相应的解决方案:
数据筛选:
- 确保
$order_in
数组中的每个元素都经过了排名处理。如果$record_1
为0或空,这些行可能没有被包含在排名中。
- 确保
排名映射:
- 在创建
$record_1_to_rank_map
映射时,确保映射正确。如果$record_1_values
数组中的值是唯一的,那么映射应该是正确的。如果存在重复的record_1
值,映射可能不会按预期工作。
- 在创建
排名更新逻辑:
- 当
$record_1
值不是前一个值时,您将排名设置为count($ranks_1) + 1
。如果$record_1_values
数组中存在重复值,这可能导致排名不正确。您可能需要在排名时考虑相等的record_1
值。
- 当
数据更新:
- 在更新
$order_in
数组时,确保所有元素都被更新了排名。如果$record_1_to_rank_map
映射中没有对应的排名,您将record_0
设置为null
。这可能意味着某些行没有被正确处理。
- 在更新
数据一致性:
- 检查数据库中的数据是否一致,特别是
record_1
字段的值。
- 检查数据库中的数据是否一致,特别是
排名显示:
- 检查排名显示的逻辑是否正确。在您的代码中,排名显示在
record_0
字段,确保这个字段被正确填充。
- 检查排名显示的逻辑是否正确。在您的代码中,排名显示在
错误检查:
- 检查是否有任何错误或警告在PHP错误日志中,这可能会提供一些线索。
调试:
- 在输出结果之前,添加一些调试语句来打印
$order_in
数组和$ranks_1
数组,以确保它们包含预期的数据。
- 在输出结果之前,添加一些调试语句来打印
数组键的一致性:
- 确保在更新
$order_in
数组时,使用的键与原始数组中的键一致。
- 确保在更新
排序稳定性:
- 如果
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电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。