2

我已将 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 的新手。我究竟做错了什么?谢谢!

4

1 回答 1

2

调用array_values你的数组:

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

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

于 2013-08-27T20:32:50.627 回答