PHP循环中对比MySQL查询结果不同行价格并设置显示颜色如何实现
实现方案
核心问题在于你当前是边读取数据库结果边输出,没有存储全量价格数据,无法完成跨行对比。你需要先把所有查询结果存到数组中,先计算好价格对比的基准值,再遍历渲染。
下面以「价格高于全量商品平均价标红,低于等于标黑」的需求为例,修正后的代码如下:
$sql = "SELECT * FROM goods ORDER BY id DESC LIMIT 100"; $result = $conn->query($sql); $goods_list = []; $total_price = 0; if ($result->num_rows > 0) { // 第一步:先把所有数据存到数组,同时计算总价 while($row = $result->fetch_assoc()){ $goods_list[] = $row; $total_price += $row['price']; } // 计算平均价作为对比基准 $avg_price = $total_price / count($goods_list); // 第二步:遍历数组渲染 foreach($goods_list as $item){ $product_name = $item['product']; $product_price = $item['price']; // 对比设置颜色 if($product_price > $avg_price){ $color = 'red'; }else{ $color = 'black'; } // 修正原代码的变量拼写错误 echo "<div><span style='color:$color;'>Price: $product_price</span> Product: $product_name</div>"; } }else{ echo "0 results"; }
如果你需要更细分的颜色规则,比如价格前20%标红、中间50%标橙、后30%标黑,可以提前把所有价格排序,算出分位值作为对比基准即可,逻辑和上面一致。
内容的提问来源于stack exchange,提问作者user16745306
相关产品推荐
相关产品推荐

