S'il vous plaît noter que si vous avez des chiffres avec zéro, vous devez les stocker en tant que chaînes, sinon ils seront interprétés comme des nombres octaux. Vous pouvez utiliser (int) pour obtenir le type de cast correct, lorsque vous les éditez.
Le premier code ci-dessous aplatissent le tableau par l'utilisation de serialize
comme rappel dans array_map
, les doublons sont supprimées à l'aide array_unique
, puis remettre ensemble à l'aide array_intersect_key
, le processus est mis en boucle pour arriver à des niveaux plus profonds du tableau.
Le deuxième code ci-dessous suit la même logique mais array_unique
est uniquement exécuté au niveau le plus profond de chaque chemin de clé de réseau. Une instruction if/else a été ajoutée, car tous les chemins de clé de tableau n'ont pas la même longueur/profondeur. (Si quelqu'un sait d'une meilleure façon de le faire, s'il vous plaît faites le moi savoir.)
serialize
peut être remplacé par json_encode
, mais je ne suis pas sûr de ce qui est plus rapide.
Je ne suis pas très bon pour expliquer comment les choses fonctionnent, s'il vous plaît n'hésitez pas à modifier, si vous pouvez reformuler ce que j'ai dit ci-dessus mieux.
Pour supprimer les doublons dans les tableaux multidimensionnels, à la fois les sous-matrices et les éléments dupliqués.
function multi_unique($array){
$temp = array_intersect_key($array, array_unique(array_map("serialize", $array)));
foreach ($temp as $key => $value){
if (is_array($value)){
$temp[$key] = multi_unique($value);
}
}
return $temp;
}
Pour supprimer les éléments en double du sous-tableau de l'extrémité la plus profonde de chaque chemin de clé.
function multi_unique($array){
$temp = array_intersect_key($array, array_map("serialize", $array));
foreach ($temp as $key => $value){
if (is_array($value)){
$temp[$key] = multi_unique($value);
}
//the else if statement is to counter the problem where the deepest level of each path is different
else if (count($temp) == count($temp, COUNT_RECURSIVE)){
$temp=array_unique($temp);
}
}
return $temp;
}
Parcourez votre baie. Utilisez 'array_unique'. – jszobody
@jszobody aussi? Comment vais-je monter le nouveau? –