【问题标题】:Nested JSON From PHP Array来自 PHP 数组的嵌套 JSON
【发布时间】:2013-08-27 20:29:15
【问题描述】:

我已将我的 iTunes 歌曲数据加载到 MySQL 数据库中,并且我正在尝试使用 PHP 来获取专辑信息的 JSON 提要。这段代码..

        <?php

    /* Connect  to database */
    require ('include/connect.php');

    /* Build the query */
            $query = "SELECT a.album,a.name,a.artist,a.year AS track_year, b.year AS album_year FROM staging a, (SELECT album, MAX(year) AS year FROM staging GROUP BY album) b WHERE a.album = b.album";

    /* Loop through the results and build a JSON array for the data table */
    $result = $mysqli->query($query);
    $info = array();
    while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

                if (!isset($info[$row['album']])) {
                    $info[$row['album']] = array(
                        'record' => $row['album']
                        , 'artist' => $row['artist']
                        , 'year' => $row['album_year']
                        , 'tracks' => array()
              );
           }

            $info[$row['album']]['tracks'][] = $row['name'];
    }       

    $data = json_encode($info);
            ?>

产生这个结果(截断为两个专辑)...

{
"Abbey Road": {
    "album": "Abbey Road",
    "artist": "The Beatles",
    "year": "1969",
    "tracks": [
        "Come Together",
        "Something",
        "Maxwell's Silver Hammer",
        "Oh! Darling",
        "Octopus's Garden",
        "I Want You (She's So Heavy)",
        "Here Comes The Sun",
        "Because",
        "You Never Give Me Your Money",
        "Sun King",
        "Mean Mr. Mustard",
        "Polythene Pam",
        "She Came In Through The Bathroom Window",
        "Golden Slumbers",
        "Carry That Weight",
        "The End",
        "Her Majesty"
    ]
},
"Accelerate": {
    "album": "Accelerate",
    "artist": "R.E.M.",
    "year": "2008",
    "tracks": [
        "Living Well Is the Best Revenge",
        "Man-Sized Wreath",
        "Supernatural Superserious",
        "Hollow Man",
        "Houston",
        "Accelerate",
        "Until the Day Is Done",
        "Mr. Richards",
        "Sing for the Submarine",
        "Horse to Water",
        "I'm Gonna DJ",
        "Supernatural Superserious (Live)"
    ]
}
}

我希望我的结果看起来像这样...

[
      {
        "album": "Abbey Road",
        "artist": "The Beatles",
        "year": "1969",
        "tracks": [
            "Come Together",
            "Something",
            "Maxwell's Silver Hammer",
            "Oh! Darling",
            "Octopus's Garden",
            "I Want You (She's So Heavy)",
            "Here Comes The Sun",
            "Because",
            "You Never Give Me Your Money",
            "Sun King",
            "Mean Mr. Mustard",
            "Polythene Pam",
            "She Came In Through The Bathroom Window",
            "Golden Slumbers",
            "Carry That Weight",
            "The End",
            "Her Majesty"
        ]
    },
     {
        "album": "Accelerate",
        "artist": "R.E.M.",
        "year": "2008",
        "tracks": [
            "Living Well Is the Best Revenge",
            "Man-Sized Wreath",
            "Supernatural Superserious",
            "Hollow Man",
            "Houston",
            "Accelerate",
            "Until the Day Is Done",
            "Mr. Richards",
            "Sing for the Submarine",
            "Horse to Water",
            "I'm Gonna DJ",
            "Supernatural Superserious (Live)"
        ]
    }
    ]

显然,我是使用 PHP 编码 JSON 的新手。我究竟做错了什么? 谢谢!

【问题讨论】:

    标签: php mysql json nested


    【解决方案1】:

    在您的阵列上调用array_values

    $data = json_encode(array_values($info));
    

    这会删除您的命名索引并将它们转换为数字索引,因此json_encode 应该将您的数组视为索引(而不是关联)数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2021-06-20
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2016-03-21
      相关资源
      最近更新 更多