php 多字段数组 去重,PHP 二维数组 根据一个值或者多个值来去重

废话不多说,直接上代码!

$data = [

[

'id' => 1,

'a' => 2,

'b' => 2,

'c' => 2,

],

[

'id' => 2,

'a' => 2,

'b' => 2,

'c' => 2,

],

[

'id' => 3,

'a' => 1,

'b' => 1,

'c' => 1,

],

[

'id' => 4,

'a' => 1,

'b' => 1,

'c' => 1,

],

[

'id' => 5,

'a' => 1,

'b' => 2,

'c' => 2,

],

[

'id' => 6,

'a' => 'cs',

'b' => 2,

'c' => 2,

]

];

//以上是案例原始数组,根据键 ‘a’, 'b', 'c'相同来去重,还有一个是ID

var_dump($data);

$a = array_column($data, 'a');

$b = array_column($data, 'b');

$c = array_column($data, 'c');

$res = [];

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

$res[] = ['a'=>$a[$key], 'b' => $b[$key], 'c' => $c[$key]];

}

$res = array_unique($res, SORT_REGULAR);

//函数

function handle_arguments($val, $value, $args) {

foreach ($args as $k => $v) {

if ($val[$v] != $value[$v]) {

return false;

}

}

return true;

}

//函数

function remove_duplicate ($data, $res, $args) {

$list = [];

$flag = '';

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

foreach ($res as $k => $v) {

$tmpStr = implode(',', $v);

if ($key == 0 && $k == 0) {

$flag .= $tmpStr;

$list[] = $data[$key];

}

if (handle_arguments($val, $v, $args) && strpos($flag, $tmpStr) === false) {

$flag .= '|'.$tmpStr;

list[] = $data[$key];

}

}

}

return $list;

}

//最终的去重之后的数组,函数入口

$list = remove_duplicate($data, $res, ['a','b','c']);

print_r($list);

有优化会更新,宝贵意见请评论,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值