2016-07-10 3 views
0

Ok hier ist meine Einrichtung der äußeren Schleife.Mysqli zu Array foreach innerhalb foreach; Inside foreach mit einem anderen mysqli to array liest keine Werte aus dem äußeren Array richtig

Dann die Verbindung offen halten Innerhalb dieser Schleife habe ich einen Teil Ich muss die Bild-URLs aus einer Datenbank lesen.

$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; 
    } 

Ich leere die Variablen, die in der neuen Schleife verwendet werden würde, so dass sie für jede neue Reihe sauber sind.

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

Dann benutze ich das, um bis zu 3 Bild URLs.

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; 
     } 
    } 

Diese Werte werden später in einer Registerkarte Datei am Anfang I aufgebaut innerhalb des $ rows wie $ ad foreach neue Zeile geschrieben.

Was ich bekomme ist das unten, wo die innere foreach Schleife für die Bilder auf dem ersten Artikel in der Lager-Tabelle stecken bleibt und nicht von der neuen $ ad ['ItemID'] bei jeder Iteration liest.

enter image description here

Antwort

1

In Ihrem folgenden Code:

$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; }

sollten Sie setzen das $imagerows[] Array, kurz bevor die while-Schleife beginnt. So sollte es aussehen:

$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; }

Wenn Sie nicht tun, jedes Mal wenn die Ergebnisse halten hinzugefügt immer am Ende der $imagerows. Somit wird es alle Elemente der gesamten Ergebnismenge enthalten. Als Ergebnis, jedes Mal, wenn es in foreach($imagerows as $value) Schleife geht, wird es die ersten 3 Zeilen nehmen, ihre Bilder zuweisen & dann nichts tun (wie Sie $count nur für Fälle 0 eingeschränkt haben, 1 & 2.