私はこの問題を何度も繰り返してきましたが、非常に単純なようでした。PHP/MYSQLで出力されたメニュー/サブメニューjsonを作成しようとしています。これらは次のテーブルです。
CREATE TABLE `menuHome`
`id`,
`titleName`
CREATE TABLE `menu`
`id`,
`parentmenu`,
`name`
'menuHome'には、'AboutUs'などの'titleName'が'id'で結合され、'menu' by'parentmenu'になります。これには、'history'、'Owners'、'News'などの複数のエントリがあります。
私が達成しようとしている構造は次のとおりです。
`
{
"menu" : {
"sections" : [
{
"title" : "About Us",
"items" : [
{
"name" : "History",
"id" : "0909"
},
{
"name" : "Owners",
"id" : "0910"
},
{
"name" : "News",
"id" : "0916"
}
]
},
{
"title" : "Contact Us",
"items" : [
{
"name" : "Address",
"id" : "0949"
},
{
"name" : "Map",
"id" : "0978"
}
]
},
{
"title" : "Products",
"items" : [
{
"name" : "Jeans",
"id" : "1010"
},
{
"name" : "Tables",
"id" : "1088"
},
{
"name" : "Shoes",
"id" : "2424"
}
]
}
]
}
}
`
多くの構成でそれぞれについて試しましたが、jsonにエンコードするための適切な配列構造を構築することはできません。私は今、コードの失明の段階にあるので、どんな助けも大いに受けられるでしょう
これが私の最後の試みでした:
$sql_query = 'SELECT menuHome.titleName, menuHome.id FROM menuHome';
$result = $mysqli->query($sql_query);
$menu = array();
while ($row = $result->fetch_assoc()) {
$menuid = $row["id"];
$sql_query2 = 'SELECT menu.name, menu.id FROM menu WHERE menu.parentmenu = "' . $menuid . '"';
$result2 = $mysqli->query($sql_query2);
while ($row2 = $result2->fetch_assoc()) {
$menu[$row["titleName"]][] = $row2;
}
}
return json_encode($menu);
これは、上記がもたらす結果です。
{
"About Us" : [
{
"name" : "History",
"id" : "1"
},
{
"name" : "Owners",
"id" : "2"
},
{
"name" : "News",
"id" : "3"
}
],
"Contact Us" : [
{
"name" : "Address",
"id" : "4"
},
{
"name" : "Map",
"id" : "5"
}
],
"Products" : [
{
"name" : "Jeans",
"id" : "6"
},
{
"name" : "Tables",
"id" : "7"
},
{
"name" : "Shoes",
"id" : "8"
}
]
}
問題は、「ペア」を事前に取得できないことです-「タイトル」=「私たちについて」...それは単純なことですが、私はこの問題について頭がおかしいです。
json_encodeの前にこれを追加できます:
$menuoutput = array("menu" => array("sections" => array($menu)));
しかし、「AboutUs」の前に「key」「titleName」または「title」だけを表示するにはどうすればよいですか...