2017-11-07 33 views
-1

なぜforeach内の値が2回繰り返されるのだろうか? foreachをwhileループの内側に配置します。しかし、しばらくfalseにループ条件ターン、まだforeachの内部の値を繰り返しなぜforeach内の値が2回繰り返される

<?php 
     `$conn = mysqli_connect('localhost','root','','capstone_prac_db'); 

     $sql1 = "SELECT id FROM stocks ORDER BY id DESC LIMIT 1,1"; 
     $result1 = mysqli_query($conn,$sql1); 

    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
    <title></title> 
    </head> 
    <body> 
     <?php 
      while($row = mysqli_fetch_array($result1)){ 
       foreach ($row as $value) { 
        echo $value; 
       } 
      } 
     ?> 
    </body> 
    </html> 
+0

whileループは複数回実行されています...クエリが返す行ごとに1回実行する必要があります – kchason

答えて

0
<?php 

     `$conn = mysqli_connect('localhost','root','','capstone_prac_db'); 

    $sql1 = "SELECT id FROM stocks ORDER BY id DESC LIMIT 1,1"; 
     $result1 = mysqli_query($conn,$sql1); 

    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
    <title></title> 
    </head> 
    <body> 
     <?php 
     $i=0; 
      while($row = mysqli_fetch_array($result1)){ 

        echo $row[$i]; 
        $i++; 

      } 
     ?> 
    </body> 
    </html> 

あなたは2つのループ1は別のものを入れ子になっています。上記のコードを試してください。

+0

はループ内でループを実行していますか? – erwin

+0

時々必要に応じて、時にはそれは過剰殺しであり、時には間違っている。ここでは、あなたが出力として期待していることによると間違っています。 – pr1nc3

+0

大変ありがとうございます。 – erwin

0

mysqli_fetch_array()のドキュメントを参照し、2番目の引数のデフォルトはMYSQLI_BOTHです。つまり、反復処理中の配列は単一のレコードで構成されていますが、数値的にも連想的にもインデックスされています。つまり、同じ値を指す2つの配列インデックスを繰り返し処理しています。

$row[0]; 
$row['id']; 

このように関数を呼び出す、修正するには:

mysqli_fetch_array($result1, MYSQLI_ASSOC) 
0

配列としてmysqliの:: fetch_array戻ってすべての行を。 whileループは通常fetch_rowと一緒に使用されます。ここではすべての行をループし、それぞれ別々にループアクションを実行します。

両方のタイプのループを使用するのではなく、1つを選択して実行します。あなたはqueryは、直接配列をmysqli::resultオブジェクトを返し、ないことに注意して

$result = mysqli_fetch_array($result1); 
foreach($result1 as $value){ 
    //Do your stuff here 
} 

または

while($row = mysqli_fetch_row($result)){ 
    //Do stuff here 
} 

ベアを使用することができます。結果ドキュメントページにリストされたメソッドの1つを使用して、オブジェクトから使用可能なデータを取得する必要があります。

関連する問題