如何在PHP中将数组分组并编码为JSON?

如何在PHP中将数组分组并编码为JSON?,php,mysql,arrays,grouping,encode,Php,Mysql,Arrays,Grouping,Encode,我在MySql中有两个表 部分 section_id name ===================== 1 Section1 2 Section2 类别 category_id section_id name ========================================= 1 1 Category1

我在MySql中有两个表

部分

section_id       name
=====================
1              Section1
2              Section2
类别

    category_id        section_id     name
    =========================================
    1                  1           Category1
    2                  1           Category2
    3                  2           Category3
    4                  2           Category3
这就是我现在拥有的:

$sections = mysql_query($sql_section) or die("Could not execute query.");
$categories = mysql_query($sql_category) or die("Count not execute query");

$result = array('sectionlist' => array());
    for ($i=0; $i < mysql_num_rows($sections); $i++ ){
        for ($j=0; $j < mysql_num_rows($categories); $j++){
            if (mysql_result($sections,$i,"section_id") == mysql_result($categories,$j,"section_id")){
                $result['sectionlist'][] = array('sectionName' => mysql_result($sections,$i,"name"), 'categorylist' => array(array('category' => mysql_result($categories,$j,"name"))));
            }
        }
    }
echo json_encode($result);
这不是我期望的结果,我希望有一个像这样的对象:

  {sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}]},
    {sectionName: "Section1", categoryList: [{categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category4"}]},
  ]}
{sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}, {categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}, {categoryName: "category4"}]}
]}
SELECT section.section_id, category.name, section.name FROM category 
  LEFT JOIN section ON section.section_id = category.section_id;

因此,如何将第1节与第1节和第2节分组?

要回答您的问题,您需要先创建类别数组

for ($i=0; $i < mysql_num_rows($sections); $i++ ){
    $categorylist = array();
    for ($j=0; $j < mysql_num_rows($categories); $j++){
        if (mysql_result($sections,$i,"section_id") == mysql_result($categories,$j,"section_id")){
            $categorylist[] = array('category' => mysql_result($categories,$j,"name");
        }
    }
    $result['sectionlist'][] = array('sectionName' => mysql_result($sections,$i,"name"), 'categorylist' => $categorylist));
}
for($i=0;$imysql_结果($categories,$j,“name”);
}
}
$result['sectionlist'][]=array('sectionName'=>mysql_result($sections,$i,“name”),'categorylist'=>$categorylist));
}

作为旁注,.

@Greg的评论非常重要,需要注意上面的内容。此外,我建议您将查询重新编写为带有联接的单个查询,以便仅检索所需的数据。我不能100%确定您需要什么,但可能是这样的:

  {sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}]},
    {sectionName: "Section1", categoryList: [{categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category4"}]},
  ]}
{sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}, {categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}, {categoryName: "category4"}]}
]}
SELECT section.section_id, category.name, section.name FROM category 
  LEFT JOIN section ON section.section_id = category.section_id;

这将返回一个类别名称数组,这些类别名称键入与之关联的节id和节名称(如果愿意,还可以选择该类别id)

请发布您正在执行的查询。另外,避免使用过时的mysql_*函数。将它们用于新代码非常困难。更现代的替代品可用,维护更好。考虑学习而不是使用。严格使用时,它们避免了繁琐的手动转义部分,因此更容易堆积,并且作为副产品使用更安全。开始见。谢谢格雷格。理解这一点非常重要。