2010-06-07 156 views
0

全部,通過JSON請求循環

我有以下通過PHP中的函數調用發出的JSON請求。很明顯,每個URL都可以屬於一個或多個cati。

如何循環瀏覽JSON請求並創建一個關聯數組,該數組表示哪個catid包含多少個URL。

Ex: $arr = array("140"=>3, "141"=>4, "144"=>3) 

JSON請求:

{ 
    "header": { 
     "action": "loadurls" 
    }, 
    "data": [ 
     { 
      "url": "godaddy.com", 
      "catids": [ 
       141 
      ] 
     }, 
     { 
      "url": "cnn.com", 
      "catids": [ 
       140 
      ] 
     }, 
     { 
      "url": "zdnet.com", 
      "catids": [ 
       140 
      ] 
     }, 
     { 
      "url": "yahoo.com", 
      "catids": [ 
       140,141,144 
      ] 
     }, 
     { 
      "url": "google.com", 
      "catids": [ 
       141,144 
      ] 
     }, 
     { 
      "url": "rediff.com", 
      "catids": [ 
       141 
      ] 
     }, 
     { 
      "url": "apple.com", 
      "catids": [ 
       144 
      ] 
     } 
    ] 
} 

感謝

回答

1

這應做到:

var fooJson = {...jsonsnipped...}; 
var catCounts = new Object(); 
for(var i=0; i<fooJson.data.length; i++) 
{ 
    var dataItem = fooJson.data[i]; 
    for(var j=0; j<dataItem.catids; j++) 
    { 
     var cat = dataItem.catids[j]; 
     if (catCounts[cat] >= 0) 
     { 
      catCounts[cat] = catCounts[cat] + 1; 
     } 
     else 
     { 
      catCounts[cat] = 1; 
     } 
    } 
} 

請注意,我用了一個對象(),而不是一個Array()來存儲計數。你想通過catid進行關聯查找,你實際上並不是通過索引存儲有限數量的項目。如果你使用了Array而不是Array,那麼你會從「Array」的.length屬性中得到完全破壞的結果,因此在這種情況下Object更合適。如果您現在需要迭代cati,只需使用for(var key in catCounts)語法即可。

編輯:這是爲了javascript代碼,我現在意識到,也許你想要的PHP代碼。從我記得的PHP,這應該仍然有效,但如果沒有,它應該是接近。

+0

This works great ..謝謝! – Jake 2010-06-07 21:29:04