【问题标题】:Mysqli to Array foreach inside foreach; Inside foreach with another mysqli to array isn't reading values from the outer array properlyMysqli to Array foreach inside foreach;在带有另一个 mysqli 到数组的 foreach 内部没有正确地从外部数组中读取值
【发布时间】:2016-07-10 14:09:46
【问题描述】:

好的,这是我设置的外循环。

$sql    ="SELECT * from tblStock";
$result =mysqli_query($conn, $sql);
while($row=mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    $rows[]=$row;
}
foreach($rows as $ad) {

然后保持连接打开在这个循环内部,我有一部分需要从数据库中读取图像 url。

$sql        ="SELECT url from Photos where itemId ='" . $ad['ItemID'] . "';";
    echo $sql;
    $imageresult=mysqli_query($conn, $sql);
    while($imagerow=mysqli_fetch_array($imageresult, MYSQLI_ASSOC)) {
        $imagerows[]=$imagerow;
    }

我清空了将在新循环中使用的变量,以便它们对于每个新行都是干净的。

$image1="";
$image2="";
$image3="";
$count =0;

然后我用它来获取最多 3 个图片网址。

foreach($imagerows as $value) {
        switch($count) {
            case 2:
                $image3=$value['url'];
                $count =$count+1;
                break;
            case 1:
                $image2=$value['url'];
                $count =$count+1;
                break;
            case 0:
                $image1=$value['url'];
                $count =$count+1;
                break;
        } 
    }

这些值稍后将写入 $rows 中的选项卡文件中的新行,作为我在开始时设置的 $ad foreach。

我得到的是下面的内容,其中图片的内部 foreach 循环卡在 stock 表中的第一个项目上,并且在每次迭代时都没有从新的 $ad['ItemID'] 中读取。

【问题讨论】:

    标签: php mysql arrays mysqli foreach


    【解决方案1】:

    在您的以下代码中:

    $sql ="SELECT url from Photos where itemId ='" . $ad['ItemID'] . "';"; echo $sql; $imageresult=mysqli_query($conn, $sql); while($imagerow=mysqli_fetch_array($imageresult, MYSQLI_ASSOC)) { $imagerows[]=$imagerow; }

    您应该在 while 循环开始之前重置 $imagerows[] 数组。所以它应该是这样的:

    $sql ="SELECT url from Photos where itemId ='" . $ad['ItemID'] . "';"; echo $sql; $imageresult=mysqli_query($conn, $sql); $imagerows = array(); while($imagerow=mysqli_fetch_array($imageresult, MYSQLI_ASSOC)) { $imagerows[]=$imagerow; }

    如果您不这样做,则每次结果都会不断添加到$imagerows 的末尾。因此它将保存整个结果集的所有元素。结果,每次进入 foreach($imagerows as $value) 循环时,它都会占用前 3 行,分配它们的图像,然后不做任何事情(因为您已将 $count 限制为仅适用于案例 0、1 和 2。

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 1970-01-01
      • 2018-09-06
      • 2013-07-08
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      相关资源
      最近更新 更多