Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用嵌套while语句时,外部while是否会影响内部while_Php - Fatal编程技术网

Php 使用嵌套while语句时,外部while是否会影响内部while

Php 使用嵌套while语句时,外部while是否会影响内部while,php,Php,我正在使用php和mysqli从mysql中提取一些数据,我很惊讶这段代码能够正常工作 <?php $mysqli = new mysqli("localhost", "root", "", "test"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $result = $my

我正在使用php和mysqli从mysql中提取一些数据,我很惊讶这段代码能够正常工作

<?php
$mysqli = new mysqli("localhost", "root", "", "test");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$result = $mysqli->query("select subscriber_number from r4_subscriber_choices");
/*
500 Records Here
*/
$ac = 'acc';
$i = 0;
while($row = $result->fetch_array())
{
$n = $row['subscriber_number'];
  //echo $i++ . '   ' .$row['subscriber_number'] . '<br/>';
  $new_q = $mysqli->query("select text_message from incoming_sms where dest_msisdn = $n  and text_message like '%acc%'");
  while($row2 = $new_q->fetch_array()){
  echo $i++ . '   ' .$row2['text_message'] . '<br/>';
  }

}

$result->close()

?>
外部while循环500条记录,而内部循环57条。在我看来,我期望内部循环也循环500次,因为它在外部循环中循环500次,但只循环57次


有人能解释一下为什么会这样吗?

也许第二个while并不总是有结果。如果$new\u q没有结果或查询无效,则第二次执行的回显不会执行。

否,它不会运行57次。它运行的次数与外部循环相同。只是你的回音在第二个循环中,这个循环只有57条外部记录的行。试试这个

  while($row2 = $new_q->fetch_array()){
    // echo $i++ . '   ' .$row2['text_message'] . '<br/>';
  }
  echo $i++;
对于内部查询返回0行的外部循环的所有行,您看不到回音,因为回音仅在内部循环也有行时执行。就是这样。尝试在内部循环外使用一个虚拟回显,您将看到内部查询执行了同样多的次数


如果您的第一个查询中有500个结果,那么显然您的外部循环将迭代500次。你已经知道了。将为内部查询返回尽可能多的记录的内部循环。内部循环的启动和停止次数至少与外部循环相同


比如说。如果外部查询中有500行,并且500个内部查询中的每个查询都有50条记录,那么内部循环将一起迭代25000次。

直接在sql中执行查询,并检查它返回多少结果。内部/外部循环并不重要,它取决于结果的记录集。另外,在内部使用$j,与外部不同这不是一个真正的答案,更多的是一个评论。。。也许这只是猜测。尽量提供更多信息