php数组合并的问题

查看:88
本文介绍了php数组合并的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

今天项目遇到一个分类合并的问题结构如下;

$a= [
    0=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'后台开发'
    ],
    1=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'前端开发'
    ],
    2=>[
     'id' =>2,
     'name'=>'设计部',
     'job'=>'UI设计师'
    ],
    3=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'前端开发444'
    ],
];

现在就是想要的结构就是这样的效果:

Array
(
    [0] => Array
        (
            [name] => 技术部
            [job] => Array
                (
                    [0] => 后台开发
                    [1] => 前端开发
                    [2] => 前端开发444
                )

        )
    [1] => Array
        (
            [name] => 设计部
            [job] => Array
                (
                    [0] => UI设计师
                )

        )

)

我一开始想,想把id相同的丢到一个数组中,然后在循环这个数组,取到name和job。但是发现一个问题就是,foreach用的很多,感觉方法不是好。。所以请问下大家, 有什么好的方法或者思路。

下面的我改的代码

$res = [];
foreach ($a as $k => $v) {
    $res[$v['id']][] = $v;
}

foreach ($res as $key => $value) {
   foreach ($value as $k2 => $v2) {
      $res2[] = [
          'name' =>$v2['name'],
          'job' => array_column($value,'job')
      ];

   }
}

print_r($res2);

下面的代码实际出来的效果。会有重复。。,所以最后一步还要去去重。。很麻烦

解决方案

$a= [

0=>[
 'id' =>1,
 'name'=>'技术部',
 'job'=>'后台开发'
],
1=>[
 'id' =>1,
 'name'=>'技术部',
 'job'=>'前端开发'
],
2=>[
 'id' =>2,
 'name'=>'设计部',
 'job'=>'UI设计师'
],
3=>[
 'id' =>1,
 'name'=>'技术部',
 'job'=>'前端开发444'
],

];

$result = array();

foreach ($a as $key => $val) {

$result[$val['id']]['name']   = $val['name'];
$result[$val['id']]['job'][]  = $val['job'];

}

$result = array_values($result);

var_dump($result);die;

如果说你要去重就用isset去判断下

这篇关于php数组合并的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆