如何按总数量的每10%输出缓冲点?代码仅输出单点问题排查
问题分析与解决
你的代码只输出一个点的核心问题是判断条件只固定检测了第一个10%的位置,没有动态更新后续的触发阈值。
具体来说:round((($numRows*10)/100))计算结果是12(123的10%约12.3),所以只有当$count等于12时会打印一个点。当$count超过12后,这个固定条件再也不会满足,自然不会继续输出后续的点。
修正思路
需要维护一个动态的阈值变量,每打印一个点就把阈值增加10%的总量,这样就能依次触发20%、30%……100%的打印逻辑。
修正后的示例代码
$numRows = 123; $count = 0; // 初始化第一个触发阈值:总数量的10% $nextThreshold = round($numRows * 0.1); while(true){ $count++; if($count == $nextThreshold){ echo "."; echo str_repeat(' ', 1024*64); // 更新阈值为下一个10%的位置 $nextThreshold += round($numRows * 0.1); // 防止阈值超过总数量,避免无意义的判断(可选) if($nextThreshold > $numRows){ $nextThreshold = $numRows + 1; } } // 补充循环终止条件(原无限循环需根据实际场景终止) if($count >= $numRows){ break; } }
关键修改点
- 新增
$nextThreshold变量,动态记录下一个需要打印点的位置 - 每次打印点后,将阈值增加10%的总数量,实现每完成10%就触发一次打印
- 补充了循环终止逻辑(原代码的无限循环需要根据实际业务场景结束)
内容的提问来源于stack exchange,提问作者Rei
相关产品推荐
相关产品推荐

