1

ここで私の前の質問の上に構築するだけです:

JSON 文字列を書き換える - キーを値でグループ化して新しい配列にしますか?

出力が次のようになるように、指定された配列をどのようにトラバースして再ソートするのか疑問に思っています。

[{
"Name": "Title 1",
"Date": "2012-12-05",
"rows": [
    {
        "Subtitle": "Subtitle 1",
        "Count1": 566,
        "Count2": 105
    },
    {
        "Subtitle": "Subtitle 2",
        "Count1": 76,
        "Count2": 15
    }
    ]
}, 
{
"Name": "Title 2",
"Date": "2012-12-06",
"rows": [
    {
        "Count1": 66,
        "Count2": 5
    }...

元のjson配列は「名前」列でグループ化され、このようなマルチレベル構造にソートされます(アプリケーションでメニューを適切に構築するための親/複数の子json構造)?

元の json データは次のようになります。

[{
"Name": "Title 1",
"Subtitle": "Subtitle 1",
"Count1": 556,
"Count2": 5,
"Date": "2012-12-05"
}, {
"Name": "Title 1",
"Subtitle": "Subtitle 2",
"Count1": 10,
"Count2": 100,
"Date": "2012-12-05"
}, {
"Name": "Title 3",
"Subtitle": "Subtitle 3",
"Count1": 798,
"Count2": 11,
"Date": "2012-12-04"
}...

そして明らかに、私はjsonデータを読み込んで処理し、再フォーマットして吐き出すので、PHPで解決策を探しています。

4

2 に答える 2

2

連想配列を想定し、出力を名前で並べ替えます。

$output = array();

for ($data as $row) {

    if (!isset($output[$row['Name']])) {
        $output[$row['Name']] = array(
            'Name' => $row['Name'],
            'Date' => $row['Date'],
            'rows' => array()
        );
    }

    $output[$row['Name']]['rows'][] = array(
        'Subtitle' => $row['Subtitle'],
        'Count 1'  => $row['Count 1'],
        'Count 2'  => $row['Count 2'] 
    );
}
于 2012-12-30T21:57:32.947 に答える
1
hash = {};
result = [];
for (var i = 0; i < data.length; i++) {
    var name = data[i].Name;
    if (!hash.hasOwnProperty(name)) {
        var newitem = { Name: name,
                        Date: data[i].Date,
                        rows: []
                      };
        result.push(newitem);
        hash[name] = newitem;
    }
    hash[name].rows.push({ Subtitle: data[i].Subtitle,
                           Count1: data[i].Count1,
                           Count2: data[i].Count2
                         });
}
于 2012-12-23T12:25:55.470 に答える