我有点进退两难,在 PHP 中,foreach 循环和 while 循环在这种情况下似乎做了完全相同的事情:
foreach ($execute->result as $item) {
echo $item['user_pass'] . '<br />';
}
并且
while ($row = mysqli_fetch_assoc($execute->result)) {
echo $row['user_pass'] . '<br />';
}
在这种情况下它们是完全等价的。
mysqli_result
实现了 Traversable
接口(如此处所述: http://www.php.net/mysqli_result ),因此也可以使用 foreach
循环进行迭代。
我认为,在内部,在
foreach
对象上调用 mysqli_result
也会执行对 mysqli_fetch_assoc
的调用。
我认为使用第一种方法或第二种方法没有什么区别;然而,第一个看起来更漂亮,对我来说“更多 PHP5”!
说到灵活性,第一个当然也更灵活,因为您可以将该代码与任何实现
Traversable
的对象一起使用,而不仅仅是 mysqli_result
。
对于从数据库获取结果,我确实更喜欢 while 方法,因为如果获取返回 false,则其主体不会执行,而 foreach 主体将失败,您需要检查 false,因为访问false 的按键会崩溃。
来自:https://www.php.net/manual/en/mysqli-result.fetch-assoc.php
返回表示所获取行的关联数组,其中数组中的每个键表示结果集的某一列的名称,如果结果集中没有更多行,则返回 null,如果失败则返回 false。
$fetch = false;
foreach($fetch as $row) {
echo $row['title'];
}
警告:foreach() 参数必须是 array|object 类型,在第 5 行 /in/8gGsR 中给出 false
否则需要一段时间
$fetch = false;
while($row = $fetch) {
echo $row['title'];
}
我们想要的什么都没有发生,因为条件是 false。如果没有更多结果,则返回 null,这也会导致条件为 false。
这也适用于所有 PDO 获取方法。
for 与 foreach 与 while 在 php 中迭代数组哪个更快
答案表明速度差异非常小,以至于你使用哪个几乎不重要。我喜欢使用 foreach 循环来迭代返回的信息,因为我可以访问键和值,这根据需要的用途可以很方便。
$returned = array(array("userName" => "Tim"),array("userName" => "Bob"), array("userName" => "Guy"));
foreach($returned as $L1)
{
foreach($L1 as $L2 => $val)
{
if($L2 === "userName")
{
echo 'Hello: ' . $val . "<br />";
}
}
}
我想这取决于您需要什么值、您需要多少控制以及您需要它的位置。