好的,这是我对外循环的设置。
$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;
}
}
稍后将这些值写入$行中的标签文件中的新行,作为我在开头设置的$ ad foreach。
我得到的是下面的内容,图片的内部foreach循环卡在了库存表的第一个项目上,而不是在每次迭代时从新的$ ad [' ItemID']中读取
答案 0 :(得分: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行,分配它们的图像和放大器。然后不做任何事情(因为你只限于案例0,1和2的$count
。