php中定义json数组,如何在一个数组PHP中设置子json数组

我是php的新手,我试图从以下响应中获取数据,但我想在子数组中设置此数据.这个怎么做?我有两个不同的表类别和产品.如何明智地显示多个产品类别.

提前致谢!

{

"data" : [

{

"id" : "1",

"recipe_name" : "Tofu Tikka",

"ingredients" : "Firm tofu 1 pack (bite sized cube)\r\n",

"prepration" : "Press tofu with the help of plate to remove moisture

and leave for 30-40 minutes, then cut in cubes.\r\n",

"category_id":"1",

"category_name":"Today's Menu"

}

]

}

如何像下面的方法一样在子数组中设置以上响应

{

"data":[

"category_id":"1",

"category_name":"Today's Menu"

"recipes::[

{

"id":"1",

"recipe_name":"Tofu Tikka",

"ingredients":"Firm tofu 1 pack ",

"prepration":"Press tofu with the help of plate"

}, {

"id":"2",

"recipe_name":"Tikka Paneer",

"ingredients":"Firm tofu 1 pack ",

"prepration":"Press tofu with the help of plate"

},

]

]

}

下面是我的PHP文件

// required headers

header("Access-Control-Allow-Origin: *");

header("Content-Type: application/json; charset=UTF-8");

// include database and object files

include_once '../config/database.php';

include_once '../objects/product.php';

// instantiate database and product object

$database = new Database();

$db = $database->getConnection();

// initialize object

$product = new Product($db);

// query products

$stmt = $product->read();

$num = $stmt->rowCount();

// check if more than 0 record found

if ($num>0) {

// products array

$products_arr=array();

$products_arr["data"]=array();

// retrieve our table contents

// fetch() is faster than fetchAll()

// https://stackoverflow.com/questions/2770630/pdofetchall-vs-pdofetch-in-a-loop

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

// extract row

// this will make $row['name'] to

// just $name only

extract($row);

$product_item=array(

"id" => $id,

"recipe_name" => $recipe_name,

"ingredients" => html_entity_decode($ingredients),

"prepration" => $prepration,

"category_id" => $category_id,

"category_name" => $category_name

);

array_push($products_arr["data"], $product_item);

}

echo json_encode($products_arr);

} else {

echo json_encode(

array("message" => "No products found.")

);

}

?>

解决方法:

我建议您在获取类别及其相关产品的记录时使用JOIN.它将需要单个查询和单个循环来生成所需的数组.这是您可以使用的示例查询.它将获得每个产品记录的类别名称,并且不会显示其中没有产品的那些类别.

SELECT * FROM categories AS c LEFT JOIN offers AS p ON c.category_id=p.category_id WHERE p.offer_id IS NOT NULL

注意:-不要在搜索查询中使用星号(*),而应使用表字段名称.

// initialize empty category array

$categoryArr = [];

// $row has product info with category id and name in it.

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){

/* First key of categoryArr variable is category id. It will automatically create array key for each category.

* If an array key already exists, it will add prodcts in it.

*/

$categoryArr[$row['category_id']]['category_id'] = $row['category_id'];

$categoryArr[$row['category_id']]['category_name'] = $row['category_name'];

$categoryArr[$row['category_id']]['products'][] = $row;

}

/* Once loop done with its work. Need to reset array keys with the help of below function. */

$result = array_values($categoryArr);

echo json_encode($result); ?>

我没有测试过,它只是给您一个想法.希望您能改善它.

标签:phpmyadmin,arrays,json,php

来源: https://codeday.me/bug/20191110/2014036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值