0

この質問は以前にも尋ねられましたが、誰も答えていないと思います。

mysqlクエリが次のような結果を返すとしましょう

name    |  id
tarun   |   1
tarun   |   2
tarun   |   3 

ここで、標準の json エンコードを行うと、次のような結果が得られます。

[{"name":"tarun","id":"1"},{"name":"tarun","id":"2"},{"name":"tarun","id":"3"}]

しかし、私は以下のようなものを出力しました

[{"name" : "tarun", "ids" : [{"id": "1"},{"id": "2"},{"id": "3"}]}]

構文の誤り (もしあれば) は無視してください。バックエンドのスクリプト言語として PHP を使用しています。

4

3 に答える 3

1

あなたはおそらく次のようなことをしています

SELECT name, id FROM ...

$data = array();
while ($row = mysql_fetch_assoc($result)) {
   $data[] = $row;
}

希望する構造を考えると、

   $data[$row['name']]['ids'][] = array('id' => $row['id']);

これで正確な構造が得られるわけではありませんが、すべての ID がtarunフィールド値をキーとする配列の下に子配列として配置されます。

于 2013-10-16T17:07:12.163 に答える
0

@Marc Bの答えを拡張する

// Getting per person id's list
$people = array();
while ($row = mysql_fetch_assoc($result)) {
    $people[$row['name']][] = array('id' => $row['id']);
}

// Encoding as JSON
$output = "[";

foreach ($people as $name => $ids) {
    $output .= '{"name" : "'.$name.'", ids: [';
    foreach ($ids as $key => $id) {
        $output .= '{"id" : "'.$id.'"},';
    }
    rtrim($output, ",");
    $output .= ']},';
}
rtrim($output, ",");
$output .= ']';

echo $output;

上記の解決策は、質問に固有のものです。私の意見では、この問題に対する一般的な JSON Encode メソッドは非常に難しいか、不可能です。

于 2013-10-16T17:21:06.330 に答える