当前位置:Gxlcms > PHP教程 > 遍历json数据,对同一属性数据进行分组?

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

时间:2021-07-01 10:21:17 帮助过:28人阅读

{
    "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"
                    }
                ]
            },

        }
    ]
}

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

    public static function buildList($module){
        $jobList2 = "";
        if($module['jobs']){
            foreach($module['jobs'] as $job){
                $jobList2 .= <<
                    {$job['name']}
                    {$job['salary']}
                
html;
            }
        }
        return <<
                    
  • {$module['title1']}

    {$module['desc1']}

      {$jobList2}

    更多职位

  • {$module['title2']}

    {$module['desc2']}

      {$jobList2}

    更多职位

  • {$module['title3']}

    {$module['desc3']}

      {$jobList2}

    更多职位

  • {$module['title4']}

    {$module['desc4']}

      {$jobList2}

    更多职位

  • html; }

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

    回复内容:

    {
        "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"
                        }
                    ]
                },
    
            }
        ]
    }
    

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

        public static function buildList($module){
            $jobList2 = "";
            if($module['jobs']){
                foreach($module['jobs'] as $job){
                    $jobList2 .= <<
                        {$job['name']}
                        {$job['salary']}
                    
    html;
                }
            }
            return <<
                        
  • {$module['title1']}

    {$module['desc1']}

      {$jobList2}

    更多职位

  • {$module['title2']}

    {$module['desc2']}

      {$jobList2}

    更多职位

  • {$module['title3']}

    {$module['desc3']}

      {$jobList2}

    更多职位

  • {$module['title4']}

    {$module['desc4']}

      {$jobList2}

    更多职位

  • html; }

    就是根据不同的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数组:

    var jobsSortObject = {}; 
    for(var i =0; i< jobs.length; i++){
        var job = jobs[i],
            mark = job.mark,
            jobItem = jobsSortObject[mark];
        if(jobItem){
            jobsSortObject[mark].push(job);
        }else{
            jobsSortObject[mark] = [job];
        }
    }
    

    jobsSortObject就会是这个样子:

    {
        'group:1' : [{} , {}, {}],
        'group:2' : [ {} ]
    }
    

    php$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);
    

    人气教程排行