動的メニューの仕組みを学ぼうとしています。チュートリアルを見つけました。以下の配列に基づいて動的メニューを作成できます。
$menu_items = array(
(object) array('id'=>'1', 'name'=>'Home', 'parent_menu_id'=>'0'),
(object) array('id'=>'2', 'name'=>'Products', 'parent_menu_id'=>'0'),
(object) array('id'=>'3', 'name'=>'About', 'parent_menu_id'=>'0'),
(object) array('id'=>'4', 'name'=>'Contact', 'parent_menu_id'=>'0'),
(object) array('id'=>'5', 'name'=>'Apparel', 'parent_menu_id'=>'2'),
(object) array('id'=>'6', 'name'=>'Shirts', 'parent_menu_id'=>'2'),
(object) array('id'=>'7', 'name'=>'Pants', 'parent_menu_id'=>'2'),
(object) array('id'=>'8', 'name'=>'Hats', 'parent_menu_id'=>'5'),
(object) array('id'=>'9', 'name'=>'Gloves', 'parent_menu_id'=>'5'),
(object) array('id'=>'10', 'name'=>'Ballcaps', 'parent_menu_id'=>'8'),
(object) array('id'=>'11', 'name'=>'Beanies', 'parent_menu_id'=>'8'),
(object) array('id'=>'12', 'name'=>'Wool', 'parent_menu_id'=>'11'),
(object) array('id'=>'13', 'name'=>'Polyester', 'parent_menu_id'=>'11'),
(object) array('id'=>'14', 'name'=>'Jimsider.com', 'parent_menu_id'=>'4'),
);
今私の問題です。この配列に MySQL からデータを入力できるようにしたいと考えています。fetchall を使用してこれを達成しようとしましたが、これにより配列が作成されましたが、配列が上記の PHP 配列と大きく異なります。(var_dumpで確認)
次の列を持つ MySQL テーブルを作成しましたid, name, parent_menu_id
。上記のように情報を挿入しました。
上記の PHP 配列と同じ配列タイプでデータベース情報を取得するにはどうすればよいですか?
配列が PHP から見える方法:
array(14) { [0]=> object(stdClass)#15 (3) { ["id"]=> string(1) "1" ["name"]=> string(4) "Home" ["parent_menu_id"]=> string(1) "0" } [1]=> object(stdClass)#14 (3) { ["id"]=> string(1) "2" ["name"]=> string(8) "Products" ["parent_menu_id"]=> string(1) "0" } [2]=> object(stdClass)#13 (3) { ["id"]=> string(1) "3" ["name"]=> string(5) "About" ["parent_menu_id"]=> string(1) "0" } [3]=> object(stdClass)#12 (3) { ["id"]=> string(1) "4" ["name"]=> string(7) "Contact" ["parent_menu_id"]=> string(1) "0" } [4]=> object(stdClass)#11 (3) { ["id"]=> string(1) "5" ["name"]=> string(7) "Apparel" ["parent_menu_id"]=> string(1) "2" } [5]=> object(stdClass)#10 (3) { ["id"]=> string(1) "6" ["name"]=> string(6) "Shirts" ["parent_menu_id"]=> string(1) "2" } [6]=> object(stdClass)#9 (3) { ["id"]=> string(1) "7" ["name"]=> string(5) "Pants" ["parent_menu_id"]=> string(1) "2" } [7]=> object(stdClass)#8 (3) { ["id"]=> string(1) "8" ["name"]=> string(4) "Hats" ["parent_menu_id"]=> string(1) "5" } [8]=> object(stdClass)#7 (3) { ["id"]=> string(1) "9" ["name"]=> string(6) "Gloves" ["parent_menu_id"]=> string(1) "5" } [9]=> object(stdClass)#6 (3) { ["id"]=> string(2) "10" ["name"]=> string(8) "Ballcaps" ["parent_menu_id"]=> string(1) "8" } [10]=> object(stdClass)#5 (3) { ["id"]=> string(2) "11" ["name"]=> string(7) "Beanies" ["parent_menu_id"]=> string(1) "8" } [11]=> object(stdClass)#4 (3) { ["id"]=> string(2) "12" ["name"]=> string(4) "Wool" ["parent_menu_id"]=> string(2) "11" } [12]=> object(stdClass)#3 (3) { ["id"]=> string(2) "13" ["name"]=> string(9) "Polyester" ["parent_menu_id"]=> string(2) "11" } [13]=> object(stdClass)#2 (3) { ["id"]=> string(2) "14" ["name"]=> string(12) "Jimsider.com"
foreach を実行してデータを入力しようとしましたが、データベースの最後のエントリのみが配列に含まれています。
try {
$conn = new PDO($dblink, $db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = $conn->query('SELECT * FROM menu
');
foreach($data as $row) {
$menu_items = array(
(object) array('id'=>''.sprintf($row[id]).'', 'name'=>''.sprintf($row[name]).'', 'parent_menu_id'=>''.sprintf($row[parent_menu_id]).''),
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
foreach の試行で配列がどのように見えるか:
array(1) { [0]=> object(stdClass)#5 (3) { ["id"]=> string(1) "3" ["name"]=> string(8) "Over ons" ["parent_menu_id"]=> string(1) "0" } }
編集: ブラケットを使用して配列を埋める場合: foreach がループでスタックしているように見えますか?
try {
$conn = new PDO($dblink, $db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = $conn->query('SELECT id,name,parent_menu_id FROM menu
');
foreach($data as $row) {
$menu_items[] = array(
(object) array('id'=>''.$row[id].'', 'name'=>''.$row[name].'', 'parent_menu_id'=>''.$row[parent_menu_id].''),
);
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}