【问题标题】:How to read tables and render them as JSON in PHP?如何在 PHP 中读取表格并将其呈现为 JSON?
【发布时间】:2015-02-22 13:13:38
【问题描述】:

我有类别和子类别结构的数据库:

category:

subcategory:

我希望通过 PHP 获得所需格式的 JSON。我尝试了大部分时间,但没有成功。

{
"success":"true",
"category_1":{
"cat_id":"1",
"cat_name":"menu1",
"cat_img":"cat1.jpg",
"sub_category":[
{
"sub_id":"1",
"sub_name":"sub name"
},
{
"sub_id1":"2",
"sub_name1":"sub name"
},
{
"sub_id2":"3",
"sub_name2":"sub name"
},
{
"sub_id3":"4",
"sub_name3":"sub name"
}
]
},
"category_2":{
"cat_id":"2",
"cat_name":"menu2",
"cat_img":"cat2.jpg",
"sub_category":[
{
"sub_id":"1",
"sub_name":"sub name"
},
{
"sub_id1":"2",
"sub_name1":"sub name"
}
]
},
"category_3":{
"cat_id":"3",
"cat_name":"menu3",
"cat_img":"cat3.jpg",
"sub_category":[
{
"sub_id":"1",
"sub_name":"sub name"
},
{
"sub_id1":"2",
"sub_name1":"sub name"
},
{
"sub_id3":"",
"sub_name1":"sub name"
}
]
}
}

我试过这段代码,但是没有用。我更喜欢 PDO 解决方案。

$servername = "localhost";
$username = "res_user";
$password = "Res@123";
$dbname = "res_db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

 $sql = "SELECT *, category.id AS catId FROM category INNER JOIN sub_category ON category.id = sub_category.category_id ORDER BY category.id, sub_category.category_id";
$res = mysqli_query($conn, $sql);
$categoryArray = array();
$oldCatId = 0;
while ($row = mysqli_fetch_assoc($res)) {
    if ($row['catId'] != $oldCatId) {
        $categoryArray[$row['catId']] = array(
            'success' => true,
            'category_' . $row['catId'] = array(
        'cat_id' => $row["catId"],
        'cat_name' => $row['cat_name'],
        'cat_img' => $row['cat_img'],
        'sub_category' => array(
            'sub_id' => $row['category_id'],
            'sub_name' => $row['sub_name']
        )
            )
        );
     $oldCatId = $row['catId'];
    } else {
        $categoryArray[$row['catId']]['category_' . $row['catId']]['sub_category'][] = array(
            'sub_id' => $row['category_id'],
            'sub_name' => $row['sub_name']
        );
    }
}


  echo  json_encode($categoryArray);

【问题讨论】:

  • 问题出在哪里?
  • 这可能会有所帮助stackoverflow.com/questions/671118/…
  • 我们可以看看你的 PHP 代码吗?请将其编辑到您的问题中。
  • 感谢您进行编辑。 “我希望它在 PDO 中工作” - 啊,这就是我们要求事先努力的原因。这里有人为您编写了代码,代码可以工作,但仍然不符合您的要求。提问时,请确保包含所有相关细节。
  • “它不起作用” - 什么不起作用?如果可以,请更具体一些,并尝试一些调试?

标签: php json slim


【解决方案1】:

你需要这样的东西:从按类别 id 排序的类别中取出所有行,并与子类别一起加入。

然后你遍历你的结果。您检查一下,当前类别 id 是否等于先前的猫 id。如果没有,则构建主数据数组,并添加第一个子类别,如果没有,则添加下一个子类别。

$sql = "
    SELECT *, category.id AS catId
    FROM category
    INNER JOIN subcategory ON category.id = subcategory.category_id
    ORDER BY category.id, subcategory.category_id
";
$res = mysqli_query($conn, $sql);
$categoryArray = array();
$oldCatId = 0;
while ($row = mysqli_fetch_assoc($res)) {
    if ($row['catId'] != $oldCatId) {
        $categoryArray[$row['catId']] = array(
            'success' => true,
            'category_' . $row['catId'] = array(
        'cat_id' => $row["catId"],
        'cat_name' => $row['cat_name'],
        'cat_img' => $row['cat_img'],
        'sub_category' => array(
            'sub_id' => $row['category_id'],
            'sub_name' => $row['sub_name']
        )
            )
        );
        $oldCatId = $row['catId'];
    } else {
        $categoryArray[$row['catId']]['category_' . $row['catId']]['sub_category'][] = array(
            'sub_id' => $row['category_id'],
            'sub_name' => $row['sub_name']
        );
    }
}

【讨论】:

  • 回答得很好,但我想知道是否值得鼓励这类 OP 首先努力。 Stack Overflow 不想让自己被称为“免费编码器”服务:)
  • (FWIW 我不鼓励在查询中连接 - 让字符串继续运行,并在开始和结束时使用引号。我认为这样编辑 SQL 更容易)。
  • @halfer: to get itself known as a "free coder" service 今天是圣诞节的人 :) 这是我送给你的礼物。
  • “让字符串继续运行”我认为这更具可读性。首先,它在第 80 列,所以在这里,在文本编辑器中是可读的,它帮助我分离条件/语句等......
  • 我已对您的查询进行了编辑,如果您不同意,请回滚 - 连接每一行的要求会妨碍您。希望 OP 至少会看一下编辑!
猜你喜欢
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多