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);
有優化會更新,寶貴意見請評論,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM