while ループ (最後の $var ) によって作成された最後の行にアクセスしたい。私はこのようなことを試しました:
$bar= "";
while ($bar= mysql_fetch_array($foo)) {
global $bar;
}
echo $bar
なぜそれがうまくいかないのですか?
while ループ (最後の $var ) によって作成された最後の行にアクセスしたい。私はこのようなことを試しました:
$bar= "";
while ($bar= mysql_fetch_array($foo)) {
global $bar;
}
echo $bar
なぜそれがうまくいかないのですか?
これは、ループ内の条件が最後に評価されたときにmysql_fetch_array
が返されFALSE
、これが に割り当てられているために発生してい$bar
ます。制御が while ループを抜けた後に使用すると、その値がecho
ed になります。最後の値を保持するには、ループ内の別の変数に割り当てます。そうすれば、条件が false と評価される前ではなく、最後の反復の値になります。例えば:
$last = null;
while ($row = mysql_fetch_array($q)) {
$last = $row
}
var_dump($last)
while ループを使用することで、グローバル変数の問題を解決できます。最初にデータベースからデータをフェッチし、その後、while ループで使用する任意の変数にそのフェッチ値を割り当てます。
$bar = "" ;
while ($bar =mysql_fetch_array($foo)){
global $bar;
$foobar = $bar;
}
echo $bar;
なぜだめですか:
$bar = "";
$foobar = "";
while ($bar= mysql_fetch_array($foo)) {
global $bar;
$foobar = $bar;
}
echo $bar
そのグローバル $bar で何をしているのかはよくわかりませんが、実際には、変数を希望どおりに割り当てるだけで、最後に割り当てられるため、最後に正しい値のままになります。
while ループで $bar を設定する$bar
ため、グローバルにする意味はありません。mysql_fetch_rows
while ループが実行されるたびに、$bar の内容は MYSQL データベースからの結果の次の行に置き換えられ、行がなくなると、偽のブール値mysql_fetch_rows
で埋められます。$bar
$bar =""; // Value of $bar is "".
while ($bar = mysql_fetch_array($foo)) {
$bar // $bar is an array with a row from $foo
}
// mysql_fetch_array return false and the while loop was aborted, so we end up here
echo $bar // $bar is now false.
データベースから取得したすべての行にアクセスしたい場合は、次のようにすることができます。
$foobar = array();
while ($bar = mysql_fetch_array($foo)) {
$foobar[] = $bar;
}
//Dostuff with $foobar, ex print_r($foobar);