循环访问JSON请求

时间:2010-06-07 20:11:20

标签: php arrays json

所有

我在PHP中通过函数调用获得了以下JSON请求。很明显,每个URL都可以属于一个或多个catids。

如何循环访问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 个答案:

答案 0 :(得分: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;
        }
    }
}

请注意,我使用Object()而不是Array()来存储计数。你想要catid的关联查找,你实际上并没有按索引存储有限数量的项目。如果你使用了Array,那么你将从“Array”的.length属性中获得完全破坏的结果,因此在这种情况下Object更合适。如果您现在需要迭代catids,只需使用for(catCounts中的var键)语法。

编辑:这是javascript代码,我现在意识到也许你想要PHP代码。从我记得的PHP,它应该仍然有效,但如果没有,它应该是接近的。