MySQLのデータをPHPで多次元連想配列にしたい
MySQLのデータを多次元連想配列にする方法を教えて下さい。
下記のような多次元連想配列のデータがあります。
これと同様のMySQLに登録されたデータから多次元連想配列を作りたいと思います。
$test=
array(
array("id" => "1","kamoku" => "算数","tensu" => "70"),
array("id" => "2","kamoku" => "理科","tensu" => "88"),
array("id" => "3","kamoku" => "国語","tensu" => "90"),
);
print_r($test);
---print_r($test)の結果---------------------------------
Array ( [0] => Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 ) [1] => Array ( [id] => 2 [kamoku] => 理科 [tensu] => 88 ) [2] => Array ( [id] => 3 [kamoku] => 国語 [tensu] => 90 ) )
--------------------------------------------------------
これと同様のデータをMySQLに作成します。
テーブル名:test
列名:id,kamoku,tensu
MySQLからデータを取得
try
{
$dbh = new PDO($DSN , $DBUSER , $DBPASS);
$query = select * from test
$stmt = $dbh->prepare($query);
$stmt->execute();
while($result = $stmt->fetch(PDO::FETCH_ASSOC))
{
$id = ($result['id']);
$kamoku = ($result['kamoku']);
$tensu = ($result['tensu']);
}
}
catch(PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br>";
die();
}
このソースの中で何らかの処理をして
print_r($test);
を実行したときに
---print_r($test)の結果---------------------------------
Array ( [0] => Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 ) [1] => Array ( [id] => 2 [kamoku] => 理科 [tensu] => 88 ) [2] => Array ( [id] => 3 [kamoku] => 国語 [tensu] => 90 ) )
--------------------------------------------------------
というような、文頭で記載したものと同じ結果を得たいと思います。
while内で
print_r($result);を行うと1行ずつ下記のような連想配列
Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 )
が取得できているのでこれを連結させて
$test_sample=<<<EOF
array("id" => "1","kamoku" => "算数","tensu" => "70"),
array("id" => "2","kamoku" => "理科","tensu" => "88"),
array("id" => "3","kamoku" => "国語","tensu" => "90")
EOF;
という配列の中身は作ることができました。
(1)ケース1
$test=array($test_sample);
print_r($test);
としてもダメで、
Array ( [0] => array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90") )
というようにうまく多次元連想配列になっていません。
(2)ケース2
$test='array('.$test_sample.')';
print_r(test);
としてみたところ、
array( array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90"))
というように配列ではなく単なる文字列として表示されてしまいます。
配列の中身を変数で扱う時には特別な記述法などがあるのでしょうか?
お礼
すみません。$keyも残骸です。ありがとうございました。
補足
ご回答頂きありがとうございます。 >DBに主キー 申し訳ございません。オートインクリメントし忘れているだけでした。 ただ、execute()はマニュアルの書き方を習っているので間違いはありませんでした。またよくよく見てみると、Prepare the query onceと書いてあったのでforeachの外に出しました。 その他ご指摘頂いた件は書き間違いなだけです。もろもろ失礼致しました。 >aとかAとか見てらんねーよ!! >テストやサンプルにしても、もうちょっとなんかあるだろう!! >見てらんねーもん作っても、あんま勉強になんかなんねーよ!! 閲覧者様が読みやすいように簡単に書いたつもりが間違っていてはまるで意味がないことは反省しておりますが、それだけで勉強している訳ではありませんのでご理解頂きたく。 書き方の問題だけであって動きは同じでしょう。 ただ、解決に繋がりましたのでその点はもろもろご指摘頂けたことに感謝申し上げます。 誠にありがとうございました。