2016-07-15 1 views
1

Ceci est le tableau d'entrée que je vais utiliser pour filtrer. Je souhaite supprimer les enregistrements en double ayant les deux: les clés [a] et [b] ont la même valeur. Je ne veux pas utiliser [c] comme condition pour supprimer les enregistrements en double. La sortie dans ce cas devrait être. Cause Les trois sous-matrices ont les valeurs de la clé [a] et la clé [b] ont la même valeur. J'ai utilisé array_unique() mais cette fonction utilise tous les 3 [a], [b] et [c] comme conditions pour supprimer les enregistrements en double dont je ne veux pas. Je ne reçois pas la sortie comme je le veux.PHP supprimer tableau multidimensionnel dupliqué

Besoin d'aide. Des suggestions ou des idées?

+0

array_unique compare les choses dans son ensemble. vous ne pouvez pas lui dire d'ignorer les composants de ce que vous comparez. vous devrez concocter quelque chose vous-même, par ex. 'array_walk()'. –

+0

Quel tableau de sortie? – TinhNQ

Répondre

0

Voici la solution à votre problème, si vous l'avez trouvé utile: -

<?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

Super. cela a fonctionné parfaitement ... – trinhdh

+0

@DanielDucTrinh oh Merci, Si elle résout votre requête, peut l'accepter comme réponse –

0

Les fonctions de tableau en PHP sont principalement conçues pour les tableaux 2D. Vous devrez parcourir le tableau multidimensionnel, effectuer une comparaison des valeurs de clé, puis affecter les résultats corrects à un tableau de conservation. Le tableau de conservation aurait besoin d'une portée qui permettrait plusieurs itérations à travers le niveau supérieur du tableau multidimensionnel. Cela pourrait être fait comme une fonction utilisée avec array_filter; ou, fait par une réaffectation autonome.

+0

Merci ... que j'essaie de faire – trinhdh

0

Essayez ceci,

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; 
}