0

我查看了各种答案,我假设这是由于缺少 foreach 循环,我只收到一个变量。共有 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 对它们进行索引来跟踪您看到的类别。如果您已经看过该类别,请添加到 links 数组。完成后设置 $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 回答