廢話不多說,直接上代碼!
<?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);
有優化會更新,寶貴意見請評論,謝謝!