0
$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = mysqli_query($link, $query);

/* associative and numeric array */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

PHPマニュアルから、私は上記のコードを持っており、誰かが私がそれをもう少しよく理解するのを手伝ってくれるかどうか疑問に思っています。これはすでに多次元ですか?次の方法で(たとえば)行5の名前と国コードにアクセスできますか?

printf ("%s (%s)\n", $row[4][0], $row[4]["CountryCode"];

または、数値配列を使用して、$ row [4] [0]、$ row[4][1]でアクセスする方がよいでしょう。どんな助けでも素晴らしいでしょう。私は(明らかに)これに関しては比較的初心者です。ありがとうございました!

4

3 に答える 3

0

いいえ、多次元配列ではありません。すべての結果で何かを行うには、次のような結果をループする必要があります。

while($row = mysqli_fetch_array($result))
{
    echo $row["CountryCode"];
}

クエリ列の名前に直接アクセスするため、数値ではなく名前を使用することを常に好みます。これにより、どの値が抽出されているかを簡単に確認できます。この例ではCountryCode、ランダムなインデックスではなく、コードを読んだときに出力されることがわかっています。

于 2013-02-20T15:03:16.453 に答える
0

mysqli_fetch_arrayパラメータを使用した結果MYSQLI_BOTHは、1次元配列になります。結果は、結果セットの1つの行を表します。各行は、次の2つの方法でインデックスが付けられた取得データを含む配列です。

  • 数値インデックス:0、1、2から結果の列数まで。
  • 文字列インデックス: "Name"、 "CountryCode"、およびその他のフィールド

配列は次のようになります。

$row Array (
    [0] => "MyName"
    [1] => "MyCountryCode"
    ["Name"] => "MyName"
    ["CountryCode"] => "MyCountryCode"
)

同じ配列に数値インデックスと文字列インデックスの両方を表示するのは混乱しますが、データは実際には正しいものです。実際に数値インデックスが必要でない限り、文字列インデックスの方がはるかに使いやすくなっています。したがって、この関数mysqli_fetch_assocはこの状況により適しています。

それでも、これらのメソッドは結果セットから1行しか返しません。すべての行を取得するには、次のアプローチを使用できます。

while( $row = mysqli_fetch_assoc( $result ) ) {
    // do something with the row
}

編集:多次元配列へのデータの追加:

$allResults = array();
while( $row = mysqli_fetch_assoc( $result ) ) {
    $allResults[] = $row;
}

ほとんどの場合、後で使用するために保存しなくても、各行を順番に処理する必要がないことに注意してください。

于 2013-02-20T15:05:28.673 に答える
0

$ rowは1次元配列であるため、これは不可能です。

/* associative and numeric array */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

そして、あなたは以下で試すことができます

printf ("%s (%s)\n", $result[0]["CountryCode"]);

mysqlから3行のみを要求しましたが、4行目以降を空/null値で出力できます。未定義/配列制限がエラーを超えています

「MYSQLI_BOTH」を使用したように。したがって、NULL値が表示されます。エラーは発生しません。

于 2013-02-20T15:08:17.070 に答える