4

私は最近かなりの量のPHPを使用しており、一般的には非常に楽しく、かなり痛みがないことがわかりましたが、多くの人がそれを嫌っているように見える癖の1つに遭遇したのではないかと心配しています。

このことを考慮:

while($row = mysql_fetch_array($result))
{
    //Do something with $row...
}

...ここで、$ resultは次のようなmysql_queryです:

名前、年齢を人から選択

ループが実行されるたびに、$rowは返される結果の異なる行を参照します。

while(...ステートメントがチェックする条件が真の場合に実行する以外のことを行う言語を私は知りませんでした。上記がどのように同じことをするかはわかります...しかし、どのようにwhileループにより、フェッチされた配列のインデックスを反復処理します。

これは単にPHPの奇妙な癖ですか、それともmysql_fetch_arrayによって返されるオブジェクトは、参照されるたびにそれ自体をインクリメント/スプライスしますか?

私はそれがどのように機能するかを理解しているので、コードで使用できますが、理由がわかりません。また、ロートコーディングは好きではありません。誰かが説明してくれれば、とてもありがたいです。

4

1 に答える 1

3

mysql_fetch_arrayによって返されるオブジェクトは、参照されるたびにそれ自体をインクリメント/スプライスします

あなたはお金に正解です。何らかの理由で、この特定の関数のマニュアルリファレンスにはそのように記載されていませんが、非常によく似たhttp://www.php.net/manual/en/function.mysql-fetch-のリファレンスを見てみましょう。 mysql_fetch_row row.php

参考文献からの引用:

フェッチされた行に対応する数値配列を返し、内部データポインタを前方に移動します。

内部データポインタが先に進んだ後、この関数をもう一度呼び出すと、次の行がフェッチされます。この動作は、それ自体とは何の関係もありませんwhile。連続した行で関数を複数回呼び出すこともできます。

この種の動作は実際には非常に一般的です。と同様のAPIを使用してファイルから読み取ることを検討してくださいfread。読むたびに、次のデータのチャンクを受け取ります。これは、カーソルとも呼ばれる内部データポインタを使用して実装されます。

于 2013-02-05T01:31:40.587 に答える