2016-07-15 5 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 
      ) 

    ) 

Я хочу удалить дубликаты записей, которые имеют как: клавиши [а] и [б] имеют то же значение. Я не хочу использовать [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 oh Спасибо, если он решает ваш вопрос, можете принять его как ответ –

0

Функции массива в PHP предназначены в первую очередь для 2D-массивов. Вам потребуется выполнить итерацию по многомерному массиву, провести сравнение значений ключей, а затем присвоить правильные результаты массиву. Массив холдинга должен обладать областью действия, которая позволила бы выполнять несколько итераций через верхний уровень многомерного массива. Это можно сделать как функцию, используемую с array_filter; или, путем автономного переназначения.

+0

Спасибо ... это то, что я пытаюсь сделать – 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; 
} 
Смежные вопросы