2012-12-23 26 views
1

只是建立在我的前面的問題的頂部位置:重寫JSON字符串 - 按值將鍵分組爲新的兩級深數組?

Rewriting a JSON string - grouping keys by value into a new array?

我想知道我怎麼遍歷數組給出求助於它,以便輸出出來是這樣的:

[{ 
"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數組按照「Name」列分組,然後按這種方式排序爲多級結構(在我們的應用程序中正確構建菜單的父/多子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數據讀取,處理它吐出來重新格式化。

+0

什麼是原始數據是什麼樣子?前面問題中的數據沒有字幕。更重要的是:你有什麼嘗試?您似乎將SO用作「爲我編寫」服務,它應該是「幫我修復我的代碼」。 – Barmar

+0

我已經更新了原始問題與示例JSON數據爲此...我試過了什麼?沒有什麼,因爲我甚至無法理解我的頭腦,我會如何處理這個問題......因此,這個問題。如果我嘗試了一些東西,但它靠得很近,但沒有按照我需要的方式工作,我也會發布。 –

回答

1

假設關聯數組和按名稱排序輸出:

$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'] 
    ); 
} 
+0

我與我的結局非常接近......我剛剛結束了在最後使用array_push而不是添加一個新的子項目,但是從上面的代碼中遺漏了一部分難題。謝謝! –

0
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 
         }); 
} 
+0

我想在PHP中使用它,就像在前端做的那樣,考慮到我將要使用的數據集,會在瀏覽器中造成太多的開銷......但感謝那個方法/解決方案。 –

+0

對不起,錯過了。但算法是一樣的,只是改變語法。 – Barmar

相關問題