gpt4 book ai didi

php - 嵌套 While 循环仅在循环内部正确运行

转载 作者:行者123 更新时间:2023-11-29 13:44:35 25 4
gpt4 key购买 nike

我有两个 while 循环,用于运行一些 MySQL 数据。

第一个 while 循环运行一堆报告并检查存储在表中的“州”(如美国)。

在该循环中,我还使用 while 循环检查第二个表的“状态”,如果状态匹配,则将一些信息推送到数组中。为了简单起见,我在这里删除了其他代码。

基本上,我从第一个 while 循环开始,并将所有信息记录到控制台,并成功循环遍历表中的所有条目。

然后,我将嵌套的 while 循环放在那里,当我尝试警告或将其记录到控制台时,它只会循环访问父循环中第一个条目的实例。

我的意思是,在 $row_wind 循环中,第一个条目是 CT(康涅狄格州)。当我注销父循环时,它会记录该表中的所有内容(CT 是第一个)。当我使用下面的代码时,它仅记录 CT,然后记录子循环中的所有条目,但之后不会与父循环相对应。我不能嵌套 while 循环吗?

while($row_wind = mysqli_fetch_array($sql_wind_result)){
while($row_alert = mysqli_fetch_array($result_user_alerts)){
echo "<script>alert('".$row_wind['state']." ".$row_alert['state']."');</script>";
}
}

最佳答案

mysqli_fetch_arrayarray_pop() 类似,一旦获取结果,就不会再次获取该结果。

所以我的猜测是,您的 $row_wind 循环实际上运行得很好,但是第二次通过 $row_alert 循环查找更多结果,发现它是已经运行过它们(在 $row_wind = 'CT' 的循环中)。

如果您将一些调试信息放在 $row_wind 循环内部但在 $row_alert 循环外部,您应该会看到差异。

要解决此问题,您必须在内部循环之前重新运行 $result_user_alerts 查询,或者 - 如果内部查询不依赖于状态可能会更好 - 运行 mysqli_fetch_all() 预先获取内部循环的所有结果,然后使用 foreach()while() 使用内部循环遍历结果数组。这样您只需获取它们一次。

如果您没有可用的mysqli_fetch_all(),您可以手动循环:

$user_alerts = array();
while($row_alert = mysqli_fetch_array($result_user_alerts)){
$user_alerts[] = $row_alert;
}

警告:然而,这种结构的方式似乎可以通过一些更好的查询来更好地执行 - 我不知道您的应用程序的详细信息,但是当您匹配两个 SQL 查询的值时在 PHP 循环中,数据库通常可以更快、更高效地完成匹配。

关于php - 嵌套 While 循环仅在循环内部正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com