合并二维数组重复信息,根据数组内部相同的key来合并数组

现有如下一个二维数组,需要根据一些要求完成相关操作


$a = array(
      array('id'=>1,'name'=>'tom','age'=>21),
      array('id'=>2,'name'=>'jack','age'=>20),
      array('id'=>3,'name'=>'jone','age'=>22),
      array('id'=>1,'name'=>'fafa','age'=>10),
      array('id'=>4,'name'=>'tom','age'=>23),
      array('id'=>2,'name'=>'jone','age'=>22),
      array('id'=>2,'name'=>'jone','age'=>22),
 );

1 合并数组a中完全重复信息,返回一个新数组

代码块:

@plan A
function array_unique_fb($array2D){
 foreach ($array2D as $v){
  $v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
  $temp[]=$v;
 }
 $temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
 foreach ($temp as $k => $v){
  $temp[$k]=explode(',',$v); //再将拆开的数组重新组装
 }
 return $temp;
}
var_dump(array_unique_fb($a));
------------------------------------------------------------------------
@plan B
function array_unique_fb($array2D){
 foreach ($array2D as $k=>$v){
  $v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
  $temp[$k]=$v;
 }
 $temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组 
 foreach ($temp as $k => $v){
  $array=explode(',',$v); //再将拆开的数组重新组装
  //下面的索引根据自己的情况进行修改即可
  $temp2[$k]['id'] =$array[0];
  $temp2[$k]['name'] =$array[1];
  $temp2[$k]['age'] =$array[2];
 }
 return $temp2;
}
var_dump(array_unique_fb($a));

返回结果:

array(6) {
  [0]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(3) "tom"
    [2]=>
    string(2) "21"
  }
  [1]=>
  array(3) {
    [0]=>
    string(1) "2"
    [1]=>
    string(4) "jack"
    [2]=>
    string(2) "20"
  }
  [2]=>
  array(3) {
    [0]=>
    string(1) "3"
    [1]=>
    string(4) "jone"
    [2]=>
    string(2) "22"
  }
  [3]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(4) "fafa"
    [2]=>
    string(2) "10"
  }
  [4]=>
  array(3) {
    [0]=>
    string(1) "4"
    [1]=>
    string(3) "tom"
    [2]=>
    string(2) "23"
  }
  [5]=>
  array(3) {
    [0]=>
    string(1) "2"
    [1]=>
    string(4) "jone"
    [2]=>
    string(2) "22"
  }
}

2 合并数组a中以某个字段(‘id’)一致的数组,合并保留第一个

代码块:

function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 

    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
} 
$result = unique_multidim_array($a,'id');
var_dump($result);

返回结果:

array(4) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(3) "tom"
    ["age"]=>
    int(21)
  }
  [1]=>
  array(3) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(4) "jack"
    ["age"]=>
    int(20)
  }
  [2]=>
  array(3) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(4) "jone"
    ["age"]=>
    int(22)
  }
  [4]=>
  array(3) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(3) "tom"
    ["age"]=>
    int(23)
  }
}

3 合并数组a中以某个字段(‘id’)一致的数组,合并保留最后一个

代码块:

function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 
    sort($array); //给数组倒叙,调用上面的方法
    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
} 
$result = unique_multidim_array($a,'id');
var_dump($result);

返回结果:

这里写代码片

————————————————————————————————

$b = array(
      (object)array('id'=>1,'name'=>'tom','age'=>21),
      (object)array('id'=>2,'name'=>'jack','age'=>20),
      (object)array('id'=>3,'name'=>'jone','age'=>22),
      (object)array('id'=>1,'name'=>'fafa','age'=>10),
      (object)array('id'=>4,'name'=>'tom','age'=>23),
      (object)array('id'=>2,'name'=>'jone','age'=>22),
      (object)array('id'=>2,'name'=>'jone','age'=>22),
 );

4 合并数组b中完全重复信息,返回一个新数组

5 合并数组b中以某个字段(‘id’)一致的数组,合并保留第一个

6 合并数组b中以某个字段(‘id’)一致的数组,合并保留最后一个

这种数据结构的出现,一般都是 json转array的时候 出现的问题,它的数据格式是一种 外层array 内层object的方式,在这里想到的解决方案是:

    $b = json_decode(json_encode($b),true);
    //note: 最好是在jsone_decode('对象',true);
    //新增true属性后 数据格式就变成我们喜闻乐见的 二维数组啦。
    附带url:
    http://php.net/manual/zh/function.json-decode.php

备注:

随时欢迎大家发表评论,就数组处理速度方面,如何优化,也可以q小编:360882750

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值