【问题标题】:while loop in php with assignment operator带有赋值运算符的php中的while循环
【发布时间】:2011-07-13 15:06:23
【问题描述】:

我正在查看的代码是这样做的......

while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}

我想知道这个 while 语句有什么作用?它里面有一个赋值运算符,所以只要 $info 被赋值为 false 以外的值,这段代码就会执行?

【问题讨论】:

    标签: php


    【解决方案1】:

    [... S]o 只要 $info 被赋值为 false 以外的值,这段代码就会执行吗?

    很好,是的。即使该表达式中有赋值运算符,表达式本身仍然代表一个值。在这种情况下,整个表达式的结果等于对$info 的赋值。换句话说:表达式与$info 相同表达式已分配给$info - 最后一个变体可能是最好的描述。

    所以现在只要$info 等于truewhile 中的代码块就会被执行。

    请记住,比较是loose comparison。因此,不仅falseNULL 或空数组都会停止内部代码块的执行。

    【讨论】:

    • 如果 $info 被赋值为 0 会发生什么?它是否将 0 等同于 false,因此循环执行停止?
    • @user481913:是的,比如falseNULL 或空数组。
    【解决方案2】:

    对于每条记录,$info 将填充当前行,直到它到达结果集的末尾时,它将被设置为 false(这应该停止 while 循环)。

    【讨论】:

      【解决方案3】:

      hakre 给出了很好的答案。据说是这样的

      while ($info=mysql_fetch_array($data_jurisdiction))
      

      将以与此相同的方式执行

      while (mysql_fetch_array($data_jurisdiction)==true)
      

      甚至这个

      $info = mysql_fetch_array($data_jurisdiction);
      if($info==true)
      

      所以请记住,如果 mysql_fetch_array($data_jurisdiction) 返回任何可以评估为 false 的内容,则分配将不起作用。其中一些值是(我知道我会忘记一些:

      • 0
      • “0”
      • “假”
      • ""
      • array()(不完全确定这个)

      【讨论】:

        【解决方案4】:

        只要 $info 被赋予一个非 false 的值,这段代码就会执行?

        是的。

        【讨论】:

          【解决方案5】:

          如果$info 为假,它会循环并停止

          mysql_fetch_array(); 逐行清除,所以总是有新结果

          【讨论】:

            【解决方案6】:

            只要 while 表达式的计算结果为 true,while 循环就会重复执行嵌套语句。

            您示例中的表达式$info = mysql_fetch_object($data_jurisdiction)type juggling 之后检查$info(来自mysql_fetch_object() 的赋值)是否等于true。

            这里有两点很重要:

            1. mysql_fetch_object() 返回结果集的下一行,直到到达数据集的末尾,它返回 false。请参阅method documentation here
            2. 不等于 0 或 null 的变量的所有赋值在类型杂耍后都评估为 true。

            【讨论】:

              【解决方案7】:

              来自手册:

              赋值表达式的值就是赋值的值。即“$a = 3”的值为3。

              也来自关于 mysql_fetch_array 的手册:

              返回对应于获取行的字符串数组,如果没有更多行,则返回 FALSE。

              因此,一旦没有更多的行,赋值就会变成:

              $info = false
              

              在 while 条件下将被评估为 false,从而导致循环终止。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-10-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-01-27
                • 1970-01-01
                • 2013-09-25
                相关资源
                最近更新 更多