在PHP和MySQL中创建带循环的嵌套数组
我有两个MySQL表,其中我使用以下SQL语句提取数据: 类别:从类别中选择类别id、类别名称 产品:从产品中选择专业id、专业名称、专业类别 当然,pro_category是cat_id的外键 我想了解以下JSON数据:在PHP和MySQL中创建带循环的嵌套数组,php,mysql,loops,multidimensional-array,Php,Mysql,Loops,Multidimensional Array,我有两个MySQL表,其中我使用以下SQL语句提取数据: 类别:从类别中选择类别id、类别名称 产品:从产品中选择专业id、专业名称、专业类别 当然,pro_category是cat_id的外键 我想了解以下JSON数据: "categories":[ { "id": 1, "name": "Guitars", "products":[ { "id": 1,
"categories":[
{
"id": 1,
"name": "Guitars",
"products":[
{
"id": 1,
"name": "Fender Statocaster"
},
{
"id": 2,
"name": "Gibson Les Paul"
}
]
},
{
"id": 2,
"name": "Basses",
"products":[
{
"id": 3,
"name": "Fender Jazz Bass"
},
{
"id": 4,
"name": "MusicMan StingRay"
}
]
}
]
所以我必须做一个类别数组,对于每个元素,一个子产品数组,然后我将使用json_encode
通过类别循环并创建第一个数组非常容易,但我完全被困在如何创建产品子数组上。。。这是我的代码,问号是我停下来的地方,因为我不知道该怎么做:
$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) {
$categories[] = array(
'id' => $row_rsCategories['cat_id'],
'name' => $row_rsCategories['cat_name'],
'products' => array(
???????
),
);
}
拜托,你能帮忙吗?
谢谢 我使用联接查询按类别id订购产品,这样属于某个类别的产品就会聚集在一起。遍历结果数组,如果您看到cat_id发生更改,则创建新类别
$db=新PDO$connectionString;
$sql=SELECT*从产品t1左连接t1上的类别t2.pro_category=t2.cat_id按t2.cat_id排序;
$stmt=$db->prepare$sql;
如果$stmt->execute
{
$rows=$stmt->fetchAll;
$currentCategory=NULL;
$categories=数组;
foreach$行作为$r
{
如果$currentCategory==NULL | |$r['cat_id'!=$currentCategory['id']
{
$currentCategory=数组
'id'=>r$r['cat_id'],
'name'=>r$r['cat_name'],
“产品”=>阵列;
;
$categories[]=$currentCategory;
}
$currentCategory['products'][]=数组
'id'=>'pro_id',
'name'=>'pro_name',
}
}
其他的
{
var_dump$stmt->errorInfo;
}
我使用联接查询按类别id订购产品,这样属于某个类别的产品将汇集在一起。遍历结果数组,如果您看到类别id发生更改,则创建新类别
$db=新PDO$connectionString;
$sql=SELECT*从产品t1左连接t1上的类别t2.pro_category=t2.cat_id按t2.cat_id排序;
$stmt=$db->prepare$sql;
如果$stmt->execute
{
$rows=$stmt->fetchAll;
$currentCategory=NULL;
$categories=数组;
foreach$行作为$r
{
如果$currentCategory==NULL | |$r['cat_id'!=$currentCategory['id']
{
$currentCategory=数组
'id'=>r$r['cat_id'],
'name'=>r$r['cat_name'],
“产品”=>阵列;
;
$categories[]=$currentCategory;
}
$currentCategory['products'][]=数组
'id'=>'pro_id',
'name'=>'pro_name',
}
}
其他的
{
var_dump$stmt->errorInfo;
}
THNAKS,这工作!!产品查询,多次调用会影响性能吗?@伊凡:我想你必须使用一个内部for循环。请考虑使用PHP PDO或MySQL扩展,而不是默认的MySQL函数,因为它们不再被PHP社区推荐,并且容易受到MySQL注入等安全威胁的影响。“NKS,这是工作的!!产品查询,这么多次调用会影响性能吗?”伊凡:我想你将不得不使用一个内部for循环。请考虑使用PHP PDO或MySQL扩展,而不是默认的MySQL函数,因为它们不再被PHP社区推荐,并且容易受到MySQL注入等安全威胁的影响。
$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) {
$product_array = array();
$product_array_query = mysql_query("SELECT pro_id, pro_name, pro_category FROM products WHERE pro_category = '".$row_rsCategories['cat_id']."'");
while($product_array_fetch = mysql_fetch_array($product_array_query)) {
$product_array[] = array("id"=>$product_array_fetch['pro_id'],"name"=>$product_array_fetch['pro_name']);
}
$categories[] = array(
'id' => $row_rsCategories['cat_id'],
'name' => $row_rsCategories['cat_name'],
'products' => $product_array,
);
}
$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) {
$categories[$row_rsCategories['cat_id']] = array(
'id' => $row_rsCategories['cat_id'],
'name' => $row_rsCategories['cat_name'],
'products' => array(),
);
}
while ($row_rsProducts = mysql_fetch_assoc($rsProducts)) {
$categories[$row_rsProducts['pro_category']]['products'][] = array(
'id' => $row_rsProducts['pro_id'],
'name' => $row_rsProducts['pro_name'],
);
}