【问题标题】:while loop inside foreach loop inside while loop [closed]while 循环内的 foreach 循环内的 while 循环 [关闭]
【发布时间】:2016-03-14 01:27:11
【问题描述】:

我知道只是标题受伤了。我觉得我处于起步阶段。 我正在使用 2 个不同的数据库。我正在尝试使用 while 循环使用 while 循环从第一个数据库中获取 4 个值。然后我想在 foreach 循环中使用 while 循环来查找这 ​​4 个值中的每一个的名称和相关规律。我尝试了不同的代码,这个让我最接近,但只返回第一个值而不是其他三个。

$link1 = mysql_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_dblogin);
if(!$link1 || !mysql_select_db ($mysql_dblogin)) {
die ($conn_error_message);
}

$link2 = mysql_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db, TRUE);
if(!$link2 || !mysql_select_db ($mysql_db)) {
die ($conn_error_message);
}



$sql="SELECT loi FROM $username";
$result = mysql_query("$sql", $link1);
$data = array();
if($result){
WHILE($row=mysql_fetch_assoc($result)){
$data[]=$row;
foreach($data as $vote){
        $loi = $vote['loi'];
        $sql="SELECT objet, colo FROM scruinfo WHERE colo = '$loi' ";
        $result=mysql_query("$sql", $link2);
        if($result){
            WHILE($row=mysql_fetch_assoc($result)){
            $loi = $row["colo"];
            $name = $row["objet"];
            echo "<table><td href='votes.php?loi=".$loi."'>".$name."</td></table><br>";
            }
        }
    }
}
}else{
echo mysql_error();
}
?>

【问题讨论】:

  • 这个,哪个?
  • 对不起,我的代码有点晚了。我是这个网站的新手。
  • 原因很简单:你是updating $row 在第二个while循环中。你也有两次$result
  • 看起来像是使用loi链接两个表的主要候选者
  • 非常感谢您解决这个问题。

标签: php loops foreach while-loop


【解决方案1】:

foreach 内部,您正在使用新值更新$result$row,因此外部while 将停止循环。
重命名这些变量,它就会工作!

【讨论】:

    【解决方案2】:
    WHILE($row=mysql_fetch_assoc($result)){
        $data[]=$row;
        foreach($data as $vote){
    

    这很糟糕,您将一个结果存储在数据中,然后遍历数据中的所有实体,然后在下一个循环中向数据中添加另一行,然后循环数据中的所有实体。因此,如果您从第一个查询中提取 10 行,您将对第一行运行 foreach 10 次,第二个 9 次,第三个 8 次,依此类推。如果您提取 100 行,那么您运行的二级循环就会超时,更不用说运行超过 5000 个查询了。

    【讨论】:

    • 我唯一的问题是我找不到另一个来做这件事。我想我很快就需要更改该代码,但这只是项目的测试版。所以现在就足够了。感谢您的建议,我将其放在评论中以记住下一个版本。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2016-04-24
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多