如何让函数在while循环中运行直至返回true?代码仅执行一次问题求助
解决你的While循环只运行一次且无预期输出问题
刚接触while循环踩坑太正常啦!我帮你理清楚问题出在哪~
先看看你原来的代码:
<?php $array = array(1,2,3,4,5,6); $rand = array_rand($array); while ($array[$rand] != 6) { echo "no"; } echo "yes"; ?>
问题根源
你现在的代码有个关键问题:随机数只生成了一次!
- 如果第一次
array_rand刚好抽到6,那$array[$rand] == 6,while循环条件不成立,直接跳过循环执行echo "yes",这部分是正常的。 - 但如果第一次抽到的不是6,比如抽到3,那
$array[$rand]就永远是3,while的条件3 != 6会一直成立,程序会进入死循环,一直执行echo "no"但永远跳不出来。很多在线运行环境会因为死循环超时,所以你看不到"no"的输出,还以为循环没执行。
修正方案
要实现“一直随机直到抽到6,没抽到就输出no,抽到就输出yes”的逻辑,必须每次循环都重新生成随机数,有两种常用写法:
写法一:用无限循环+break跳出
<?php $array = array(1,2,3,4,5,6); while (true) { $rand = array_rand($array); // 每次循环都重新随机 if ($array[$rand] == 6) { echo "yes"; break; // 抽到6就立刻跳出循环 } echo "no"; // 没抽到就输出no } ?>
写法二:在循环内更新随机数
<?php $array = array(1,2,3,4,5,6); $rand = array_rand($array); // 先初始化一次随机数 while ($array[$rand] != 6) { echo "no"; $rand = array_rand($array); // 每次循环结束前更新随机数 } echo "yes"; ?>
小提示
用while循环的时候一定要注意:要么保证循环条件最终会变成false,要么用break主动跳出,不然很容易陷入死循环哦~
内容的提问来源于stack exchange,提问作者Stark
相关产品推荐
相关产品推荐

