如何使用While()工作循环PHP数组?

时间:2018-04-08 19:45:40

标签: php mysql arrays mysqli

我找到了一些连接到MySQL数据库的PHP代码,并为表public class QueueEmptyException extends QueueException{ public QueueEmptyException() { super("Stack is empty"); } } 的每一行获取列public void someMethodThrowingQueueExceptions() throws QueueException{ //some logic //throw here either a full or empty exception throw new QueueEmptyException(); } 。我很好奇为什么使用CityName循环而不是Citieswhile()。所以这里有关于for()在循环数组时如何工作的问题:

  • 首先,foreach变量不是一个二维数组,它的行包含SQL查询中的城市列表,它的列包含查询每一行的列?

    < / LI>
  • 如果是这种情况,无法使用while()$row来遍历for()数组?

  • 其次,foreach()如何知道数组何时仅使用$row的第一行中的while()来结束循环?

    < / LI>
  • 第三,$row = $stmt->fetch_assoc()如何在循环结束时不使用while()移动到while()数组的下一行?

  • 最后但并非最不重要的是,$row如何输出next()数组的每一行的城市名称,而不指定要使用的数组的行,但仅指定列{{1} }}

感谢您的回答。

echo $row['CityName'];

3 个答案:

答案 0 :(得分:3)

你可以遍历$ row,因为它是一个数组(一个简单的数组,而不是一个二维数组);但是你没有使用while循环遍历一个名为$ row的数组,你正在迭代$stmt->fetch_assoc()返回的结果集 - 这不是一个数组 - 并且分配返回的单个值从结果集中向该语句中的$row行(请注意=进行赋值)。

while本身并没有神奇地移动任何指针;它是对$stmt->fetch_assoc()的调用,它不仅返回单行结果,而且将结果集指针移动到下一个结果(并确定它何时到达结果集的末尾)

答案 1 :(得分:0)

while($this_is_true){
// do this
}
# if the condition is not true for this while stmt, it will not execute (not even once)

do{ 
 // stuff here 
} while($thisIsTrue);
# even if the condition isn't true, a do-while executes at least once (the first time)

关键是他们正在使用while(),因为它是一种懒惰的方式来说“只有在它是真的时才这样做”,所以他们不必在循环之前检查它是否为真。使用for循环,您需要知道循环的结果数。对于do,您需要在尝试使用结果(echo)之前知道结果。所以,你使用while()检查它是否有效,然后只用那段代码执行它。

就个人而言,我喜欢这样做......

if($query->num_rows > 0){
 $query->bind_result($bindvar);
 while($query->fetch()){
  // do stuff
 }
 $query->close();
} else {
 // no results found 
}

答案 2 :(得分:0)

您可以使用foreach代替while。至少如果stmtmysqli_result并且您的PHP版本不是非常过时(比5.4更新)。在这种情况下,你的循环将是:

foreach($stmt as $row) 
{   
  echo $row['CityName'];
}

这并不意味着$stmt是一个2D数组。它是一个实现Traversable接口的对象。这意味着foreach循环将隐式调用所需的方法。