You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让函数在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:58