PHP 二维数组去重问题求指教,有内置函数吗?

数据格式:

$data = [
    [
        'id'=>'a8856',
        'date'=>'20100612'
    ],
    [
        'id'=>'a8856',
        'date'=>'20180102'
    ],
    [
        'id'=>'top856',
        'date'=>'20100612'
    ],
    [
        'id'=>'c8236',
        'date'=>'20100612'
    ],
    [
        'id'=>'e2569',
        'date'=>'20010612'
    ],
    [
        'id'=>'e2569',
        'date'=>'20150825'
    ]
];

寻求帮助:上述数组中id值可能重复,但date值唯一,我想去重重复项,保留日期最新记录,例如:2个id都是e2569,但date一个是2001的另一个是2015的,就删除2001这一条,保留2015这条记录,可能会有多个id重复的值。

在线几等、、、求demo谢谢,或者内置函数有能解决此问题的吗?

阅读 3.1k
5 个回答
foreach($data as $v){
    if(!isset($arr[$v['id']])){
        $arr[$v['id']] = $v;
    }elseif($arr[$v['id']]['date'] < $v['date']){
        $arr[$v['id']]['date'] = $v['date'];
    }
}
$new = array_values($arr);

比较笨
usort( $data,function($a1,$a2){return $a1['date']>$a2['date'];} );
$result=array_combine(array_column($data,'id'),array_column ( $data,'date'));
$result=array_map(function($m,$n){return ['id'=>$m,'date'=>$n];},array_keys($result),array_values($result));
var_dump($result);

新手上路,请多包涵

array_column($data,'data','id')

如果你需要的是从上而下的覆盖,那直接array_column($data,NULL,'id')就行了,这样相同的id值会以最后结束的为准

想要去重重复项并且保留日期最新记录,那就循环进行比较吧
内置函数只能去重,不能保留日期最新记录

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题