【发布时间】:2011-07-13 15:06:23
【问题描述】:
我正在查看的代码是这样做的......
while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}
我想知道这个 while 语句有什么作用?它里面有一个赋值运算符,所以只要 $info 被赋值为 false 以外的值,这段代码就会执行?
【问题讨论】:
标签: php
我正在查看的代码是这样做的......
while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}
我想知道这个 while 语句有什么作用?它里面有一个赋值运算符,所以只要 $info 被赋值为 false 以外的值,这段代码就会执行?
【问题讨论】:
标签: php
[... S]o 只要 $info 被赋值为 false 以外的值,这段代码就会执行吗?
很好,是的。即使该表达式中有赋值运算符,表达式本身仍然代表一个值。在这种情况下,整个表达式的结果等于对$info 的赋值。换句话说:表达式与$info 相同或表达式已分配给$info - 最后一个变体可能是最好的描述。
所以现在只要$info 等于true,while 中的代码块就会被执行。
请记住,比较是loose comparison。因此,不仅false,NULL 或空数组都会停止内部代码块的执行。
【讨论】:
false 或NULL 或空数组。
对于每条记录,$info 将填充当前行,直到它到达结果集的末尾时,它将被设置为 false(这应该停止 while 循环)。
【讨论】:
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 的内容,则分配将不起作用。其中一些值是(我知道我会忘记一些:
【讨论】:
只要 $info 被赋予一个非 false 的值,这段代码就会执行?
是的。
【讨论】:
如果$info 为假,它会循环并停止
mysql_fetch_array(); 逐行清除,所以总是有新结果
【讨论】:
只要 while 表达式的计算结果为 true,while 循环就会重复执行嵌套语句。
您示例中的表达式$info = mysql_fetch_object($data_jurisdiction) 在type juggling 之后检查$info(来自mysql_fetch_object() 的赋值)是否等于true。
这里有两点很重要:
mysql_fetch_object() 返回结果集的下一行,直到到达数据集的末尾,它返回 false。请参阅method documentation here。null 的变量的所有赋值在类型杂耍后都评估为 true。【讨论】:
来自手册:
赋值表达式的值就是赋值的值。即“$a = 3”的值为3。
也来自关于 mysql_fetch_array 的手册:
返回对应于获取行的字符串数组,如果没有更多行,则返回 FALSE。
因此,一旦没有更多的行,赋值就会变成:
$info = false
在 while 条件下将被评估为 false,从而导致循环终止。
【讨论】: