【问题标题】:PHP While loop with rand() and if statement for randPHP While 循环与 rand() 和 rand 的 if 语句
【发布时间】:2015-08-02 21:23:17
【问题描述】:

这是我的第一篇文章。 对于这个完全业余的问题,我很抱歉,但我想学习 PHP,所以我开始为 PHP 做一些在线课程 - 教程,有一个没有解释的例子,我在谷歌上找不到答案。

在代码行 4 $flip = rand(0,1);这意味着 $flip 得到一个随机数 0 或 1 对吗? 然后在第 6 行有 if ($flip) { ... 但他们没有解释“if ($flip)”是什么意思或等于什么。 例如 $flip = 1 或 $flip = 0。提前致谢。

$headCount = 0;
$flipCount = 0;
while ($headCount < 3) {
    $flip = rand(0,1);
    $flipCount ++;
    if ($flip){
        $headCount ++;
        echo "<div class=\"coin\">H</div>";
    }
    else {
        $headCount = 0;
        echo "<div class=\"coin\">T</div>";
    }
}
echo "<p>It took {$flipCount} flips!</p>";

【问题讨论】:

  • 它喜欢 TRUE 或 FALSE。在条件语句中一般 1 表示 TRUE,0 表示 FALSE
  • if ($flip) 在此代码中等于 if ($flip != 0)。有关布尔转换,请参阅 manual
  • 如果随机为 0,则为假,否则为真
  • 您可以将 1 和 0 用于布尔值。看php.net/manual/en/language.types.boolean.php
  • @Random 好的,你说得对,就像我写的那样——在这段代码中,$flip 只等于 0 或 1。但是,好吧,我会编辑我的评论。

标签: php


【解决方案1】:

基本上在 PHP 中,表达式被计算为其布尔值。例如

if($flip) // means if(1) or if(0)

if (expr)
  statement

0 : 被评估为布尔 FALSE

if($flip){

} 
else { 
  // goes here
} 

1 : 被评估为布尔 TRUE(非零)

if($flip){
  // goes here
} 
else { 

} 

如果第一个表达式的值为 TRUE(非零),则进入 if 块

【讨论】:

    【解决方案2】:

    你的第一个假设是正确的:

    $flip = rand(0,1);
    

    $flip 将等于 0 或 1。例如:

    $flip = rand(0,5);
    

    将随机返回一个介于 0 和 5 之间的数字。

    通常,如果您像这样执行if 声明

    if($example)
    

    您正在测试该值是真还是假。 true 也可以表示为 1,false 也可以表示为 0。

    因此,$flip 等于 0 或 1,它等于真或假。所以如果flip为真或1,那么它将执行if语句中的代码。作为说明,您可以通过使用以下方法测试 false 来反转 if 的工作方式:

    if(!$flip)
    

    实际上,如果$flip 大于 0,它将被认为是真的,请参见下面的示例:

    $test = 0;
    if($test) //This will be false and therefore echo It is false
    {
      echo "It is true";
    }
    else
    {
      echo "It is false";
    }
    
    $test2 = 5;
    if($test2) //This will be true and therefore echo It is true
    {
      echo "It is true";
    }
    else
    {
      echo "It is false";
    }
    

    更新

    您可以认为以下内容实际上是相同的:

      if($flip)
      if($flip == 1 || $flip == true || $flip > 0)
    

    【讨论】:

    • 所以为了让我和其他阅读者清楚。假设我们让 $flip = rand(0,9); Flip 得到以下 0,1,2,3,4,5,6,7,8,9 之一因此 if ($flip) 实际上意味着 $flip == 1 并且仅当 $翻转 == 1 否则会转到 else
    • @Kiri - 你错了。这意味着if($flip) 检查$flip0 还是FALSEif 不会比较或检查它的 1TRUE
    • @Kiri 正如 kishor 所提到的,if 不关心值是1 还是true,只是它不是假而不是 0。我放了一个更新上面以帮助澄清。
    • 这个页面详细解释了哪些值被转换为哪些布尔值:php.net/manual/en/language.types.boolean.php
    • 从技术上讲,if 确实关心它是 1 还是 true;它会将它得到的任何结果转换为布尔值。 1 和 true 都会进入分支的原因是因为 1 在转换为布尔值时变为 true。
    【解决方案3】:

    等于 0 的变量表示false,其他数字表示true

    if(0) => false // you go in the else statement
    if(1) => true
    if(2) => true
    

    等等……

    其实你做if($flip)的时候,PHP执行的测试就是if($flip != 0)

    【讨论】:

    • 没有 2 值 :)
    • @ZakariaWahabi 这是为了理解目的,因为 OP 想学习 ;)
    • 是的,我明白了,但是为了理解和良好的理解,布尔值没有 2 值,0 - 1 => false - 就是这样 :)
    • 对于像我这样的初学者来说完全清楚的答案是有人发布但再也找不到 if ($flip) 实际上意味着 $flip==1 或 $flip!=0 之类的答案洪扎哈林说。谢谢大家的回答,因为我的声誉很低,所以我不能投票。
    • @Kishor 请说明什么是令人困惑的?然后,关于您的问题,首先,它将是带有变量的ifs(不像这里那样恒定),我昨天有一个活生生的例子。阅读一些多线程代码(使用 PCNTL)。 pcntl_fork() 的结果是 0 如果你在父亲中,线程的 PID 如果你在孩子中。因此使用if($pid) 来检查它...但是,不建议以这种方式使用它,您应该明确if($pid != 0) 以明确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2016-01-12
    • 2013-11-01
    • 2012-06-18
    • 2015-05-19
    相关资源
    最近更新 更多