如何在PHP中将数组分组并编码为JSON?
我在MySql中有两个表 部分如何在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
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_*函数。将它们用于新代码非常困难。更现代的替代品可用,维护更好。考虑学习而不是使用。严格使用时,它们避免了繁琐的手动转义部分,因此更容易堆积,并且作为副产品使用更安全。开始见。谢谢格雷格。理解这一点非常重要。