ce qui suit n'a été testé que sur des tableaux à une dimension, remplis d'entier ou de chaine de charactère, sous PHP5
ne pas utiliser array_merge, array_diff, in_array, et array_unique, les performances sont désastreuses quand on atteint des tableaux de plus de 1000 valeurs
préférer l'utilisation des fonctions suivantes :
// remplacer array_diff par : function array_diff_perso($tab1, &$tab2) { $tab1 = array_flip($tab1); foreach($tab2 as &$v) unset($tab1[$v]); return array_flip($tab1); } // remplacer in_array par : function in_array_perso($val, &$tab1) { $tmp = array_flip($tab1); // si dans une boucle, sortir cette ligne return isset($tmp[$val]); } // remplacer array_unique par : function array_unique_perso($tab) { return array_flip(array_flip($tab)); } // fonction array_merge sans doublon function array_merge_unique($tab1, &$tab2) { foreach ($tab2 as $v) $tab1[] = $v; // pour remplacer array_merge return array_flip(array_flip($tab1)); } // fonction array_merge sans doublon optimisé pour tableaux sources sans doublon function array_merge_unique($tab1, &$tab2) { $tab1 = array_flip($tab1); foreach($tab2 as $v) if (!isset($tmp[$v])) $tab1[] = $v; return $tab1; }
Lors de benchs, on passait parfois de plus de 80 secondes à 1,7 secondes !
d'une part, qu'en pensez vous ?, et d'autre part, avez vous également d'autres fonctions à éviter, avec des solutions de remplacement ?