Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP和MySQL中创建带循环的嵌套数组_Php_Mysql_Loops_Multidimensional Array - Fatal编程技术网

在PHP和MySQL中创建带循环的嵌套数组

在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,

我有两个MySQL表,其中我使用以下SQL语句提取数据:

类别:从类别中选择类别id、类别名称

产品:从产品中选择专业id、专业名称、专业类别

当然,pro_category是cat_id的外键

我想了解以下JSON数据:

"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'],
    );
}