如何在PHP中基于MySQL日期查询结果为osl数值添加fa-up/fa-down标识
问题核心原因
- 现有逻辑是将当日osl值和自身做比较,永远无法得到正确的对比结果
- 缺少变量存储前一日的osl值用于跨周期对比
- 等于判断误用了赋值符号
=,而非比较符号==
修正方案
你可以先将查询结果转为数组后调整顺序,再通过额外变量存储前一日osl值做对比,修正后的代码如下:
<?php // 执行查询 $sql_nongadai_kol_kw2 = mysqli_query($kon,"SELECT * FROM vw_nongadai_kanwil ORDER BY TGL_UPDATE DESC LIMIT 31"); // 把结果集转为关联数组 $date_list = mysqli_fetch_all($sql_nongadai_kol_kw2, MYSQLI_ASSOC); // 反转数组变为日期从早到晚排序,方便对比前一天数据,不需要倒序展示可以去掉这行 $date_list = array_reverse($date_list); // 初始化前一日osl变量,最早的一天没有前一天数据,默认显示持平标识 $previous_osl = $date_list[0]['osl_total'] ?? 0; foreach($date_list as $print){ $tanda = ''; $current_osl = $print['osl_total']; // 对比当前和前一日osl if ($current_osl > $previous_osl) { $tanda = '<i class="fa fa-long-arrow-up"></i>'; } elseif ($current_osl < $previous_osl) { $tanda = '<i class="fa fa-long-arrow-down"></i>'; } else { $tanda = '<i class="fa fa-long-arrow-v"></i>'; } // 更新前一日osl为当前值,供下一轮循环使用 $previous_osl = $current_osl; ?> <tr> <th scope="row"><?php echo $print['tgl_update'];?></th> <td align="right"><?php echo $tanda;?> - <?php echo number_format($print['osl_total']); ?></td> </tr> <?php } ;?>
补充说明
如果你需要保留日期从新到旧的展示顺序,只需要取消array_reverse行,同时调整首次循环的默认展示规则即可。
内容的提问来源于stack exchange,提问作者RBL2
相关产品推荐
相关产品推荐

