2017-02-12 1 views
1

J'ai un tableau multidimensionnel et j'ai besoin de le vérifier pour des résultats en double et s'ils sont dupliqués, supprimer le tableau avec les résultats en double. Je dois vérifier 3 clés pour la duplication; nombre, départ et arrivée. Voici un tableau d'exemple où le 3ème tableau est un double et devrait être supprimé:vérifier les résultats en double dans le tableau multidimensionnel

[Cars] => Array 
    (
     [0] => Array 
      (
       [cartype] => car1 
       [number] => 123 
       [craft] => 456 
       [departure] => GHY 
       [departtime] => 20:25 
       [arrival] => PUI 
       [arrivetime] => 22:50 
      ) 

     [1] => Array 
      (
       [cartype] => car2 
       [number] => 567 
       [craft] => 890 
       [departure] => LHY 
       [departtime] => 16:25 
       [arrival] => PGY 
       [arrivetime] => 23:50 
      ) 
     [2] => Array 
      (
       [cartype] => car2 
       [number] => 567 
       [craft] => 890 
       [departure] => LHY 
       [departtime] => 16:25 
       [arrival] => PGY 
       [arrivetime] => 23:50 
      ) 

    ) 

J'apprécierais vraiment un peu d'aide.

Merci,

+0

Avez-vous de vérifier tous les éléments du tableau, ou tout simplement 'number'? – Barmar

+0

Vous pouvez convertir chaque tableau en une chaîne avec 'serialize()', utiliser 'array_unique()' pour supprimer les doublons, puis les convertir en tableaux avec 'unserialize()'. – Barmar

+0

http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a-multi-dimensional-array-in-php – bxN5

Répondre

1

La solution en utilisant la fonction in_array et personnalisée $hash_mapconteneur (chaque entrée est composé de number, departure et arrival valeurs clés):

// $arr is your initial array 

// hash container 
$hash_map = []; 
foreach ($arr['Cars'] as $k => &$v) { 
    $hash = $v['number'] . $v['departure'] . $v['arrival']; 
    if (in_array($hash, $hash_map)) { 
     unset($arr['Cars'][$k]); // removing duplicate item  
    } else { 
     $hash_map[] = $hash;  
    } 
} 
unset($hash_map); 

print_r($arr); 
0

effectuez les opérations suivantes afin de complètement supprimer les sous-réseaux dupliqués identiques.

$arr = [['cartype' => 'car1','number' => '123','departure' => 'GHY','arrival' => 'PUI'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY']]; 
$out = []; 
while (list($k, $v) = each($arr)) { 
if(!in_array($v,$out)) { 
    array_push($out,$v); 
} 
} 
print_r($out); 
// output 
Array 
(
    [0] => Array 
     (
      [cartype] => car1 
      [number] => 123 
      [departure] => GHY 
      [arrival] => PUI 
     ) 

    [1] => Array 
     (
      [cartype] => car2 
      [number] => 567 
      [departure] => LHY 
      [arrival] => PGY 
     ) 
) 

vérifier l'exemple here

EDIT Si vous souhaitez utiliser uniquement pour vérifier les résultats en double.

$arr = [['cartype' => 'car1','number' => '123','departure' => 'GHY','arrival' => 'PUI'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY']]; 
$out = []; 
$checks = []; 
while (list($k, $v) = each($arr)) { 
if(!in_array([$v['number'],$v['departure'],$v['arrival']],$checks)) { 
    array_push($checks,[$v['number'],$v['departure'],$v['arrival']]); 
    array_push($out,$v); 
} 
} 
print_r($out); 
// output 
Array 
(
    [0] => Array 
     (
      [cartype] => car1 
      [number] => 123 
      [departure] => GHY 
      [arrival] => PUI 
     ) 

    [1] => Array 
     (
      [cartype] => car2 
      [number] => 567 
      [departure] => LHY 
      [arrival] => PGY 
     ) 
) 

vérifier le nouvel exemple here