首頁 >後端開發 >php教程 >遍历json数据,对同一属性数据进行分组?

遍历json数据,对同一属性数据进行分组?

WBOY
WBOY原創
2016-06-06 20:32:001426瀏覽

<code>{
    "module_list": [

        {

            "content": {

                "module-type": "list-1",
                "module": "list",
                "type": "1",
                "name": "职位列表 ",
                "logo1": "imgurl1",
                "title1": "baidu1",
                "desc1": "hahahha1",
                "url1": "www.baidu.com1",
                "logo2": "imgurl2",
                "title2": "baidu2",
                "desc2": "hahahha2",
                "url2": "www.baidu.com2",
                "logo3": "imgurl3",
                "title3": "baidu3",
                "desc3": "hahahha3",
                "url3": "www.baidu.com3",
                "logo4": "",
                "title4": "",
                "desc4": "",
                "url4": "",
                "jobs": [
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    }
                ]
            },

        }
    ]
}
</code>

json存储了一些职位信息,怎么根据mark的值,对这些信息进行分组 ,例如mark值为group:1的放到一个分组里,,mark值为group:2的放到一个分组里,然后在前端显示在不同模块里。该怎么对数据进行遍历?遍历之后怎么根据不同的mark值放到不同的数组里呢

<code>    public static function buildList($module){
        $jobList2 = "";
        if($module['jobs']){
            foreach($module['jobs'] as $job){
                $jobList2 .= 
                    <a class="post post2">{$job['name']}</a>
                    <span class="salary">{$job['salary']}</span>
                
html;
            }
        }
        return 
            <div class="content">
                <ul class="cmpList">
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title1']}</h1>
                        <p>{$module['desc1']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title2']}</h1>
                        <p>{$module['desc2']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title3']}</h1>
                        <p>{$module['desc3']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title4']}</h1>
                        <p>{$module['desc4']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                </ul>
            </div>
        
html;

    }

</code>

就是根据不同的group的值,让数据显示在相应的模块下面

回复内容:

<code>{
    "module_list": [

        {

            "content": {

                "module-type": "list-1",
                "module": "list",
                "type": "1",
                "name": "职位列表 ",
                "logo1": "imgurl1",
                "title1": "baidu1",
                "desc1": "hahahha1",
                "url1": "www.baidu.com1",
                "logo2": "imgurl2",
                "title2": "baidu2",
                "desc2": "hahahha2",
                "url2": "www.baidu.com2",
                "logo3": "imgurl3",
                "title3": "baidu3",
                "desc3": "hahahha3",
                "url3": "www.baidu.com3",
                "logo4": "",
                "title4": "",
                "desc4": "",
                "url4": "",
                "jobs": [
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    }
                ]
            },

        }
    ]
}
</code>

json存储了一些职位信息,怎么根据mark的值,对这些信息进行分组 ,例如mark值为group:1的放到一个分组里,,mark值为group:2的放到一个分组里,然后在前端显示在不同模块里。该怎么对数据进行遍历?遍历之后怎么根据不同的mark值放到不同的数组里呢

<code>    public static function buildList($module){
        $jobList2 = "";
        if($module['jobs']){
            foreach($module['jobs'] as $job){
                $jobList2 .= 
                    <a class="post post2">{$job['name']}</a>
                    <span class="salary">{$job['salary']}</span>
                
html;
            }
        }
        return 
            <div class="content">
                <ul class="cmpList">
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title1']}</h1>
                        <p>{$module['desc1']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title2']}</h1>
                        <p>{$module['desc2']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title3']}</h1>
                        <p>{$module['desc3']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                    <li class="cmpList-li">
                        <img src="" alt="">
                        <h1>{$module['title4']}</h1>
                        <p>{$module['desc4']}</p>
                        <ul class="jobList2">
                            {$jobList2}
                        </ul>
                        <p class="more">更多职位</p>
                    </li>
                </ul>
            </div>
        
html;

    }

</code>

就是根据不同的group的值,让数据显示在相应的模块下面

var map = {};
for(var i=0,l=jobs.length;i var key = jobs[i]['mark'];
map[key] = map[key] || (map[key] = []);
map[key].push(jobs[i]);
}
return map;
这样返回的map就是一个key,value
{
group1:[job1,job2],
group2:[job3,job4]
}
应该就是你想要的

循环jobs数组:

<code>var jobsSortObject = {}; 
for(var i =0; i</code>

jobsSortObject就会是这个样子:

<code>{
    'group:1' : [{} , {}, {}],
    'group:2' : [ {} ]
}
</code>

<code>php</code><code>$json = '{
    "module_list": [

        {

            "content": {

                "module-type": "list-1",
                "module": "list",
                "type": "1",
                "name": "职位列表 ",
                "logo1": "imgurl1",
                "title1": "baidu1",
                "desc1": "hahahha1",
                "url1": "www.baidu.com1",
                "logo2": "imgurl2",
                "title2": "baidu2",
                "desc2": "hahahha2",
                "url2": "www.baidu.com2",
                "logo3": "imgurl3",
                "title3": "baidu3",
                "desc3": "hahahha3",
                "url3": "www.baidu.com3",
                "logo4": "",
                "title4": "",
                "desc4": "",
                "url4": "",
                "jobs": [
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:1"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:4"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:3"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    },
                    {
                        "name": "产品经理",
                        "salary": "10k-15k",
                        "url": "www.baidu.com",
                        "desc": "广州",
                        "mark": "group:2"
                    }
                ]
            }

        }
    ]
}';

$job = json_decode($json,true);
$arr  = [];
foreach ($job['module_list'][0]['content']['jobs'] as $key => $value) {
    $mark = substr($value['mark'],-1,1);
  $arr[$value['mark']][] = $value;
  $arr[$value['mark']]['title'.$mark] = $job['module_list'][0]['content']['title'.$mark];
  $arr[$value['mark']]['desc'.$mark] = $job['module_list'][0]['content']['desc'.$mark];
}
print_r($arr);
</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn