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 ?
