基于条件从PHP脚本响应返回HTML元素:Cronjob库存通知脚本优化问题
问题分析与解决方案
嘿,你的问题出在循环内的判断逻辑上!现在的代码会对每一个产品单独做判断:如果这个产品库存到了半数,就输出对应的通知;如果没到,就立刻输出“No New Notifications”。这就导致只要有一个产品不满足条件,这句话就会被打印出来,同时满足条件的产品通知也会被打印,所以两种内容会同时出现。
要解决这个问题,我们需要先收集所有符合条件的产品,等遍历完所有产品后,再统一判断输出:有符合条件的就输出这些通知,没有的话再输出“No New Notifications”。
优化后的代码如下:
<?php include 'DB.php'; $SQL = "SELECT Product_Name, Stock_Count, Stock_Remaining FROM Products WHERE Stock_Count > 0"; $result = $conn->query($SQL); // 初始化数组,存储所有库存达半数的产品名称 $halfStockProducts = []; if ($result->num_rows > 0 ){ while ($row = $result->fetch_assoc()){ // 注:实际场景中可以考虑用 >= 或 <=,避免因库存为奇数/消耗误差导致漏通知 if ($row["Stock_Remaining"] == $row["Stock_Count"] / 2){ $halfStockProducts[] = $row["Product_Name"]; } } // 遍历完成后统一判断输出 if (!empty($halfStockProducts)){ foreach ($halfStockProducts as $product){ echo "<p>$product is at half capacity</p>"; } } else { echo "<p>No New Notifications</p>"; } } else { echo "No Products Found"; } ?>
关键优化说明:
- 新增
$halfStockProducts数组,先把所有符合条件的产品名称收集起来,而不是遍历一个就输出一次 - 将输出逻辑移到循环外部:
- 数组不为空时,逐个输出符合条件的产品通知
- 数组为空时,只输出“No New Notifications”
- 额外建议:实际业务中总库存可能是奇数,或者库存消耗存在微小误差,你可以把判断条件改成
$row["Stock_Remaining"] <= $row["Stock_Count"] / 2,这样库存低于或等于半数时都会触发通知,实用性更强~
内容的提问来源于stack exchange,提问作者PureWare -Legends Of Gaming
相关产品推荐
相关产品推荐

