退職後の菜園入門 家庭菜園の栽培日記

初心者の方へ 野菜の育て方 ヒントとポイント

PHP初心者 sqlのselectは列名をつけた配列を返すのか?

すこし複雑なので細かい説明は省かせていただきます。

なぜこのことを考えるようになったかといいますと、下のような繰り返し処理 がわからなかったからです。

$data = select * from テーブル
でデータを取得して表示するとき、このような繰り返し処理を使うことが多いと思います。

foreach( $data as $row ){
echo $row['name'];
}

このなかに
$row[' name'];
という一文があります。
配列要素のnameの内容を表示します。

foreachの構文はこのようになっています。
foreach( 配列 as 変数 )

ここの$row['name']は変数にあたるわけですが、[ ]がついているので配列になっています。

ということは、構文の変数という部分が配列になっているわけですが、$row['name']でnameに保存されている内容が表示されます。

ということはnameはキーで、表示されるものが値ということでしょうか?
つまりここは連想配列になっているということでしょうか?

ここでこんな疑問が浮かびます。
そんな命令を書いた覚えはありませんが、どうしてこうなっているのでしょうか?

その答えは sql の select 命令にありました。
この命令を実行すると 自動的に列名をつけて返してくれるようです。

これは実際には fetchAll()などという関数でデータを整列させるのですが、この命令を書かなくてもデフォルトで列名をキーにしたデータをつくるようです。

このデフォルトが適用されていることがわかりませんでした。

ここまでのことを表で書かせていただきます。

このようなテーブルがあったとき、これを配列で考えると二次元配列になると思います。


ここにはid, pw, name, adrs などの列名は書かれていません。


つぎにこれを連想配列にすると、このようになるのではないかと思います。

ここでは列名がついています。
これが上で書いた$row[ ] の内容です。

この場合$dataは複数行になっているので$rowはその中の一行ということになります。

上で書いたことは、多分このようになっているのではないかと思います。
これならば、列名 name で今川義元が表示できます。

初心者が考えたことなので、多分間違っているとは思いますが、こう考えるとすっきりします。