2016-07-15 91 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; 
}