首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP,在一个数组中获取所有特定类型的项。

PHP,在一个数组中获取所有特定类型的项。
EN

Stack Overflow用户
提问于 2017-09-02 10:31:13
回答 3查看 110关注 0票数 1

好的,我有两张桌子,分类和盘子。每个类别都有一个id。每一道菜都属于特定的类别。现在,我想要的是,所有的菜肴属于一个特定的类别分组。所以所有的汤都在汤阵列{甘蓝,价格,描述,},{番茄,价格,描述,}。所有的鸡都在鸡的排列中等等。我现在要做的是:

代码语言:javascript
运行
复制
    $query = "Select id from Category";
    $Id =  $mysqli->query($query);

while($row = $Id->fetch_assoc()) {
    $idlist[] = $row["id"];
}





foreach ($idlist as $id){

    $query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
    $Listings = $mysqli->query($query);

    while($row = $Listings->fetch_assoc()) {
        $AllDishes[] = array(
           'id' => $row['id'],
           'Name' => $row['Name'],
           'Description' => $row['Description'],
           'cat_id' => $row['cat_id'],
           'Price' => $row['Price'],
           'ImagePath' => $row ['ImagePath']
          );
    }

}

但这会导致所有的菜肴被组合在一起。我如何根据菜肴的类别来区分它们?这也是构造JSON数据的正确方式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-02 10:41:28

1.使用JOIN进行单次查询(最佳解决方案):-

代码语言:javascript
运行
复制
$query = "Select Dishes.*,Category.id as cat_id from Category LEFT JOIN Dishes on Dishes.cat_id = Category.id";
$Listings =  $mysqli->query($query);
$AllDishes = array();
while($row = $Listings->fetch_assoc()) {
    $AllDishes[$row['cat_id']][] = array(
       'id' => $row['id'],
       'Name' => $row['Name'],
       'Description' => $row['Description'],
       'cat_id' => $row['cat_id'],
       'Price' => $row['Price'],
       'ImagePath' => $row ['ImagePath']
      );
}
print_r($AllDishes);

如果您想以您的编码方式执行,那么:-

2.根据类别的id区分它们:-

代码语言:javascript
运行
复制
$query = "Select id from Category";//change column name
$Id =  $mysqli->query($query);

while($row = $Id->fetch_assoc()) {
    $idlist[] = $row['id'];
}

foreach ($idlist as $id){
    $query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
    $Listings = $mysqli->query($query);

    while($row = $Listings->fetch_assoc()) {
        $AllDishes[$id][] = array(
           'id' => $row['id'],
           'Name' => $row['Name'],
           'Description' => $row['Description'],
           'cat_id' => $row['cat_id'],
           'Price' => $row['Price'],
           'ImagePath' => $row ['ImagePath']
          );
    }

}

3.根据类别的name区分它们:-

代码语言:javascript
运行
复制
$query = "Select id,category_name from Category";//change column name
$Id =  $mysqli->query($query);

while($row = $Id->fetch_assoc()) {
    $idlist[] = $row;
}

foreach ($idlist as $id){
    $id = $id['id'];
    $category_name = $id['category_name']; //change column-name
    $query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
    $Listings = $mysqli->query($query);

    while($row = $Listings->fetch_assoc()) {
        $AllDishes[$category_name][] = array(
           'id' => $row['id'],
           'Name' => $row['Name'],
           'Description' => $row['Description'],
           'cat_id' => $row['cat_id'],
           'Price' => $row['Price'],
           'ImagePath' => $row ['ImagePath']
          );
    }

}

注意:-请在第三个解决方案中更改列名(因为我不知道要存储类别名称的列名是什么)。

票数 1
EN

Stack Overflow用户

发布于 2017-09-02 10:37:21

我不确定,但我认为这里将是您期望的结果循环。

代码语言:javascript
运行
复制
 $AllDishes = array();
 while($row = $Listings->fetch_assoc()) {
    $AllDishes[$row['Name']][] = array(
       'id' => $row['id'],
       'Name' => $row['Name'],
       'Description' => $row['Description'],
       'cat_id' => $row['cat_id'],
       'Price' => $row['Price'],
       'ImagePath' => $row ['ImagePath']
      );
}
票数 0
EN

Stack Overflow用户

发布于 2017-09-02 11:09:56

您可以使用SQL联接而不是两个单独的SQL查询

代码语言:javascript
运行
复制
I hope the following may help you.



    $query = "SELECT * FROM Dishes INNER JOIN Category
                                   ON Dishes.id = Category.id ORDER BY Dishes.id";
    $res = $mysqli->query($query);      
    while($row = $res->fetch_assoc())
   {
       $AllDishes[$$row['category_name']][] = array(
                                             'id' => $row['id'],
                                             'Name' => $row['Name'],
                                             'Description' => 
                                                  $row['Description'],
                                             'cat_id' => 
                                                  $row['cat_id'],
                                             'Price' => $row['Price'],
                                             'ImagePath' => 
                                                  $row['ImagePath']
                                           );//Array Close   
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46012840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档