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"
}...

显然我正在寻找 PHP 中的解决方案,因为我将读取 json 数据,对其进行处理并将其重新格式化。

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 回答