0

さまざまな回答を見てきましたが、foreach ループがないため、変数を 1 つしか受け取っていないと想定しています。32 のカテゴリがあり、カテゴリごとに複数のリンクがあります。

テーブル構造:

CREATE TABLE `cattb` (
  `catNo` int(11) NOT NULL,
  `catName` varchar(100) NOT NULL,
  PRIMARY KEY  (`catNo`)
) 

CREATE TABLE `linktb` (
  `catId` int(11) NOT NULL,
  `URL` varchar(255) NOT NULL,
  `title` varchar(50) NOT NULL,
  `description` longtext NOT NULL,
  KEY `catId` (`catId`)
)

SQL クエリ:

SELECT catId, catName, URL, title, description FROM linktb, cattb WHERE linktb.catId=cattb.catNo

PHP :

while ($row = mysql_fetch_assoc($result)){ 
    $json['categories'][] = array( 
        "catId"=> $row[catId],
        "catName"=> $row[catName],
        'links' => array( 
            "URL"=> $row[URL],
            "title"=> $row[title],
            "description"=> $row[description]
        )
    );

応答:

"categories":[
    {"catId":"1",
    "catName":"Career Resources",
    "links":
        {"URL":"http:\/\/www.designanddesign.com\/jobs.php",
        "title":"Design & Design",
        "description":"World-Wide Job Offers"
        }
    },
    {"catId":"1",
    "catName":"Career Resources",
    "links":
        {"URL":"https:\/\/www.nuans.com\/rts-str\/en\/home-accueil_en.cgi",
        "title":"NUANS Report",
        "description":"Naming A Company (Federal)"
        }
    }

私が見たいもの:

{   categories: [
    {   catName: "Career Resources",
        catId: "1",
        links: [
            {URL:"http://www.designanddesign.com/jobs.php",title:"Design & Design",description:"World-Wide Job Offers"},
            {URL:"https://www.ic.gc.ca/app/scr/cc/CorporationsCanada/hm.html?locale=en_CA",title:"Corporations Canada",description:"Incorporating a Business"},
            {URL:"http://lea.verou.me/css3patterns/",title:"CSS3 Patterns",description:"Patterns to use for backgrounds"},
            {URL:"http://webdesignerwall.com/tutorials/cross-browser-css-gradient",title:"CSS Gradients",description:"Cross-browser Compatible"}
            ],
    },
    {   catName: "CSS",
        catId: "2",
        links: [
            {URL:"http://www.designanddesign.com/jobs.php",title:"Design & Design",description:"World-Wide Job Offers"},
            {URL:"https://www.ic.gc.ca/app/scr/cc/CorporationsCanada/hm.html?locale=en_CA",title:"Corporations Canada",description:"Incorporating a Business"},
            {URL:"http://lea.verou.me/css3patterns/",title:"CSS3 Patterns",description:"Patterns to use for backgrounds"},
            {URL:"http://webdesignerwall.com/tutorials/cross-browser-css-gradient",title:"CSS Gradients",description:"Cross-browser Compatible"}
            ],
    }

配列の for-each ループはどのように記述すればよいでしょうか?

4

3 に答える 3

3

あなたのwhileループでは$json['categories']、各反復でリセットしています。

試す

while ($row = mysql_fetch_assoc($result)){ 
    $json['categories'][] = array( 
        "catId"=> $row[catId],
        "catName"=> $row[catName],
        'links' => array( 
            "URL"=> $row[URL],
            "title"=> $row[title],
            "description"=> $row[description]
        )
    );
于 2013-02-06T17:42:03.760 に答える
1

ID でインデックスを作成して、見たカテゴリを追跡します。そのカテゴリを既に見ている場合は、リンク配列に追加します。完了したら $json['categories'] を設定します。

$catRows = array();

while ($row = mysql_fetch_assoc($result)) {
    $id = $row['catId'];
    $links_entry = array(
        'URL' => $row['URL'],
        'title' => $row['title'],
        'description' => $row['description']
    );
    if (!isset($catRows[$id])) {
        $catRows[$id] = array(
            'catId' => $id,
            'catName' => $row['catName'],
            'links' => array($links_entry)
        );
    } else {
        $catRows[$id]['links'][] = $links_entry;
    }
}

$json['categories'] = array_values($catRows);
于 2013-02-06T19:29:18.167 に答える
0

「単一のエントリを取得する」という最初の問題に。使用する

$items = array();   
while ($row = mysql_fetch_assoc($result)){ 
    $json['categories'] = array( 
        "catId"=> $row[catId],
        "catName"=> $row[catName],
        'links' => array( 
            "URL"=> $row[URL],
            "title"=> $row[title],
            "description"=> $row[description]
        )
    );
    $items[] = $json['categories'];
 }

links配列に単一のエントリがある次の問題について。現在のスキーマに問題があります。私が今見ている方法は、あなたはcatNameそのcatNameに関するリンクとものを単一のテーブルに持っているということです。これはとても冗長です。さらに正規化して、URL リンク用のcat_meta、タイトルと説明、および猫を示す catId という別のテーブルを作成できます。次に、データを選択しながら結合を使用します。これにより、クエリに一致するcat_metaからの全体の配列が返されます。そして、それを使用foreachして反復処理して、そのlinks配列を形成します。

于 2013-02-06T18:04:18.573 に答える