2016-07-15 225 views
1

這是我將用於過濾的輸入數組。PHP刪除重複的多維數組

[TESTING] => Array 
    (
     [0] => Array 
      (
       [a] => false 
       [b] => WCP 
       [c] => Title A 
      ) 

     [1] => Array 
      (
       [a] => false 
       [b] => WCP 
       [c] => Title B 
      ) 

     [2] => Array 
      (
       [a] => false 
       [b] => WCP 
       [c] => Title C 
      ) 

    ) 

我想刪除同時具有以下項的重複記錄:鍵[a]和[b]具有相同的值。我不想使用[c]作爲刪除重複記錄的條件。這種情況下的輸出應該是。

[TESTING] => Array 
    (
    ) 

原因所有3個子陣列都具有鍵[a]和鍵[b]的值是相同的值。我使用了array_unique(),但是這個函數使用全部3 [a],[b]和[c]作爲刪除我不想要的重複記錄的條件。我沒有得到我想要的輸出。

需要幫助。任何建議或想法?

+0

array_unique事情作爲一個整體進行比較。你不能讓它忽略你正在比較的組件。你必須自己拼湊一些東西,例如'array_walk()'。 –

+0

什麼輸出數組? – TinhNQ

回答

0

這是解決問題的方法,如果你發現它有用: -

<?php $a = array(
     0 => array(
       "a" => false, 
       "b" => "WCP", 
       "c" => "Title A" 
      ), 
     1 => array(
       "a" => false, 
       "b" => "WCP", 
       "c" => "Title B" 
      ), 
      2 => array(
       "a" => false, 
       "b" => "WCP", 
       "c" => "Title C" 
      ) 
     ); 
global $checkArray; 
$checkArray = $a; 
function array_remove($a){ 
    global $checkArray; 
    $arrLen = count($checkArray); 
    unset($a['c']); 
    foreach ($checkArray as $key => $value) { 
    $diff = array_diff($value, $a); 
    if (1 != count($diff) || !array_key_exists('c', $diff)){ 
     return true; 
    } 
    } 
    return false; 
} 
print_r(array_filter($a, "array_remove")); 
+0

太好了。它工作完美... – trinhdh

+0

@DanielDucTrinh哦謝謝,如果它解決了您的查詢,可以接受它作爲答案 –

0

PHP中的數組函數主要是爲二維數組設計的。您將需要迭代多維數組,對關鍵值進行比較,然後將正確的結果分配給一個存儲陣列。控制數組需要一個範圍,允許在多維數組的上層進行多次迭代。這可以作爲一個與array_filter一起使用的函數來完成;或者,通過獨立重新分配完成。

+0

謝謝...那我正在嘗試todo – trinhdh

0

試試這個,

function clearDuplicates($array) 
{ 
    $new_array=array(); 

    for($i=0;$i<count($array);$i++) 
    { 
     $x=false; 
     for($j=0;$j<count($array);$j++) 
     if($j!=$i) 
      if($array[$i]["a"]==$array[$j]["a"] && $array[$i]["b"]==$array[$j]["b"]) 
       $x=true; 

     if(!$x) 
      $new_array[]=$array[$i]; 
    } 

    return new_array; 
}