php 中 json 数据中的嵌套数组

Nested array in json data in php

提问人:SamCh 提问时间:4/23/2021 更新时间:4/23/2021 访问量:53

问:

我需要在json嵌套数组中显示Mysql数据,例如

{
    "status": true,
    "categories": [
        {
            "id": "1",
            "title": "Title 1",
        },
        {
            "id": "2",
            "title": "Title 2",
        },
        {
            "id": "3",
            "title": "Title 3",
        }
    ]
}

我正在尝试的代码是

$sql = "SELECT * FROM `categories`";
$res_data = mysqli_query($conn,$sql);
$rows = array();
while($row = mysqli_fetch_array($res_data)){
    $rows[] = $row;
    foreach($rows as $row){
        $rows = ['id' => $row['id'], 'title' => $row['title']];             
    }
}

    
    $data = array('status' => true, 'categories' => array($rows));
    echo json_encode($data);

但我得到的只是嵌套数组中的一条记录,即

{
    "status": true,
    "categories": [
        {
            "id": "1",
            "title": "Title 1",
        }
    ]
}

我怎样才能达到我的要求?

php 数组 json mysqli 嵌套

评论

0赞 splash58 4/23/2021
$rows[] = ['id' => $row['id'], 'title' => $row['title']];
0赞 SamCh 4/23/2021
@splash58现在它显示了所有内容,但有重复项。
0赞 CBroe 4/23/2021
为什么这里有一个嵌套在 while 循环中的 foreach 循环?这毫无意义。
0赞 SamCh 4/23/2021
@CBroe 是的,我之所以使用,是因为我无法获取数组中的所有记录,所以我想使用 foreach,这样它就可以循环访问所有记录。
2赞 CBroe 4/23/2021
这不仅是完全没有必要的,而且你做错了,你在那里完全破坏了你的数据。你循环,然后覆盖 - 不是该数组中的单个条目,而是整个数组,在循环体中有一些完全不同的东西。$rows$rows

答:

0赞 maxi 4/23/2021 #1

如果要避免重复,请省略循环,只需在 while 循环中写入:foreach

$rows[] = ['id' => $ row ['id'], 'title' => $ row ['title']];

...因为有了循环,你已经遍历了行数组。while

0赞 Dharman 4/23/2021 #2

您不需要任何循环。Mysqli 已经返回了一个嵌套数组,您可以直接将其输出到 JSON

$res_data = $conn->query("SELECT id, title FROM `categories`")

echo json_encode(['status' => true, 'categories' => $res_data->fetch_all(MYSQLI_ASSOC)]);