0

私はこの問題を何度も繰り返してきましたが、非常に単純なようでした。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」だけを表示するにはどうすればよいですか...

4

1 に答える 1

2
  • まず、あなたのデータは次のようになると思います-

INSERT INTO menu
id、、) VALUES (1,1 parentmenu、 "history")、 (2,1、 "owners")、 (3,1、 "news")、 (4,2、 "address")、 (5、 2、 "マップ")、 (6,3、 "ジーンズ")、 (7,3、 "テーブル")、(8,3、 "靴");name









INSERT INTO menuHome
idtitleName
VALUES
(1、 "About Us")、
(2、 "Contact Us")、
(3、 "Products");

  • 次に、クエリを-に変更することをお勧めします

SELECT pm.id、cm.id、pm.titleName、cm.name FROM menu as cm
LEFT JOIN(menuHome as pm)
ON(pm.id = cm.parentmenu);


  • 第三に、コーディングに取り掛かりましょう


私たちの目的のために、私たちはこのようなものが欲しいです-

$ arys = ["menu" => ["sections" => [
["title" => "About Us"、 "items" => [
["name" => "History"、 "id" => 1] 、
["name" => "Owners"、 "id" => 2]、
["name" => "News"、 "id" => 3]
]]、
["title" => "お問い合わせ"、 "items" => [
["name" => "Address"、 "id" => 4]、
["name" => "Map"、 "id" =>5]
]]、
["title" => "Products"、 "items" => [
["name" => "Jeans"、 "id" => 6]、
["name" => "Tables"、 " id "=> 7]、
[" name "=>" Shoes "、" id "=> 8]
]]]
]
]
];

それでは、それを構築しましょう

$ querys = "Select pm.id AS pmd、cm.id AS cmd、pm.titleName AS pmt、cm.name AS cmt from menu as cm left join(menuHome as pm)on(pm.id = cm.parentmenu)Order pmd、cmd ";
$ result = mysql_query($ querys);
$ jsary = ["menu" => ["sections" => []]];
$ lastPid = 0;
$ currentPid = 0;
$ title = "";
$ ifff = 0;
$ elss = 0;
while($ row = mysql_fetch_array($ result))
{
        $ currentPid = $ row ['pmd'];
        $ title = $ row ['pmt'];

    $cmd = $row['cmd'];
    $cmt = $row['cmt'];

    if($lastPid != $currentPid)
    {
            $insAry = [];
            $insAry = ["title"=> $title, "items" => [["name" => $cmt, "id" => $cmd]]];
            array_push($jsary["menu"]["sections"], $insAry);
            $lastPid = $currentPid;
            $ifff = $ifff + 1;
            $currentPid = 0;
    }
    else
    {
            $ind = 0;
            if($ifff > 0)
            {
                    $ind = $ifff-1;
            }
            $insAry = [];
            $insAry = ["name" => $cmt, "id" => $cmd];
            array_push($jsary["menu"]["sections"][$ind]["items"], $insAry);
    }}

ここで、json_encode()を呼び出すだけです。

json_encode($ jsary);

希望の出力が得られます

于 2012-10-31T12:06:04.913 に答える