5

php.net の関数について読みましたが、まだ質問に答えていません。私は初心者の量の C を知っており、PHP を使い始めたばかりです。通常、C で while ループを実行する場合、次のように、ループが有効でなくなるポイントまでループを進めるための条件が必要です。

while (x >= 10)  
{ 
    printf("..."; 
    printf("x \n"; 
    x++; 
}

ただし、pm メッセージ システムに使用している私の php スクリプトには、次のような while ループがあります。

while($row2 = mysql_fetch_array($query))

に続く:

{ 
  echo "<table border=1>";
  echo "<tr><td>";
  echo "Message #: ";
  echo $row['id'];
  echo "</td></tr>";
  echo "<tr><td>";
  echo "To: ";
  echo $row['to'];
  echo "</td></tr>";
  echo "<tr><td>";
  echo "From: ";
  echo $row['from'];
  echo " ";
  echo "</td></tr>";
  echo "<tr><td>";
  echo "Message: ";
  echo $row['message'];
  echo "</td></tr>";
  echo "</br>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td colspan=2></td></tr>
<tr><td></td><td>
<input type="hidden" name="id" maxlength="32" value = "<?php echo $row['id']; ?>">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="delete" value="Delete PM # <?php echo $row['id']; ?>">
</td>
<td colspan="2" align="right">
<input type="submit" name="reply" value="Reply to <?php echo $row['from']; ?>">
</td></tr>
</table>
<?php } ?>

これがどのように機能するのか、C のバックグラウンドからすると、ループを通過するたびに同じ "$query" から同じ "array fetch" 'row' を出力して、同じ場所にとどまるように見えるでしょう.. ..

何が起こっているのかをより論理的に理解するためにこれを書く方法はありますか? 言うように:

$i=0;
while ($row = ($i+mysql_fetch_array($query)) {
...
...
$i++;}

おそらくうまくいかないことはわかっていますが、この関数はどのようにインクリメントしますか? そして、コード内で実際に何らかのインクリメントが見える場所にそれを書く方法はありますか?

ありがとうございました

4

4 に答える 4

11

呼び出すたびにmysql_fetch_array、クエリから次の行が取得されます。そのwhileループは true を返し続けますmysql_fetch_arrayが、 variable に代入するものが残っています$row2。行がなくなると、変数に与えるものがなくなり、false が返されます。

ETA:あなたが言及した最後のビットに関しては、あなたの例のようにループの各反復で可変インクリメントを持つことができますが、それは完全に必要というわけではありません. ループの$var = mysql_num_rows($data)前のようなことを行うことで、返された行数を確認することもできます。while

于 2012-05-08T17:13:37.030 に答える
3

この次の関数は、「mysql_fetch_array while ループがどのように機能するか」について少し説明できるかもしれません。

class test {
    public $plus = -1;
    public $data = array();
    public $return = array();
    function fetcharray(){
        $this->plus++;
        for($i = 0; $i < sizeof($this->data[$this->plus]); $i++){
            $this->return[$i] = $this->data[$this->plus][$i];
        }
        if(sizeof($this->data[$this->plus]) < sizeof($this->data[($this->plus - 1)])){
            for($i = sizeof($this->data[$this->plus]); $i < sizeof($this->data[($this->plus - 1)]); $i++){
                $this->return[$i] = "";
            }
        }
        return ($this->data[$this->plus]) ? $this->return : false;
    }
}
$test = new test();
$test->data = array(
    array("data00","data01","data02","data03","data04","data05"),
    array("data10","data11","data12","data13","data04","data15"),
    array("data20","data21","data22","data23","data24","data25"),
    array("data30","data31","data32","data33","data34","data35"),
    array("data40","data41","data42","data43","data44","data45")
);
while($array = $test->fetcharray()){
    echo $array[0]." = ".$array[1]." = ".$array[2]." = ".$array[3]." = ".$array[4]." = ".$array[5]."<br />\n";
}
于 2014-10-27T05:06:28.590 に答える
2

mysql_fetch_array()毎回新しい行を返し、最後に達すると EOF を返すファイル読み取り関数に似ていると考えることができます。ただし、EOF の代わりにmysql_fetch_array()FALSE(0) を返します。

ブール式では、PHP は 0 以外の値を TRUE として評価するため、以下の単純な構文がループし、データセットの最後に到達するまで毎回行を $row 変数に割り当てます。

while($row = mysql_fetch_array($query)) {
  // Process row
  ...
}

PHP IDE は実際には、条件の代入について文句を言うでしょう。これは、通知を回避するために同じコードを記述する方法です。

// Get first row, or false if there were no rows
$row = mysql_fetch_array($query);
while ($row) {
  // Process row
  ...
  // Get next row
  $row = mysql_fetch_array($query);
}

この構造の方がなじみがあるかもしれません。

于 2012-05-08T17:21:41.337 に答える
1

mysql_fetch_array() は、実行された結果のクエリから行を取得する場合に呼び出す必要がある関数であるため、「mysql_fetch_array — 結果行を連想配列、数値配列、またはその両方としてフェッチする」と記述できます。

シナリオは次のとおりです。フェッチされた行に対応する配列を返し、内部データポインターを前方に移動します。より明確にする:

$result = mysql_query("SELECT id, name FROM mytable");
$row = mysql_fetch_array($result, MYSQL_NUM);

1) $result の型は何ですか? 2) mysql_fetch_array が機能するために使用する型は?

これに答えさせてください。1) $result は mysql_query() の結果変数であり、この関数はmysql の結果として型指定された結果を返します。この型は 7 つの関数を呼び出すことによってのみ作成できます。

mysql_db_query(), mysql_list_dbs(), mysql_list_fields(), mysql_list_processes(), mysql_list_tables(), mysql_query(), mysql_unbuffered_query()

次のようないくつかの機能で使用できますmysql_fetch_array() and mysql_db_name() and others

2) 関数の説明: mysql_fetch_array Docarray mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] ) を参照

于 2012-05-08T17:32:51.617 に答える