J'étais donc curieux de connaître les performances de certaines des méthodes mentionnées dans les réponses pour un grand nombre d'entiers.
Préparation
Je viens de créer un tableau de 1 million d'entiers aléatoires entre 0 et 100. Ensuite, je les ai implosés pour obtenir la chaîne.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Méthode 1
C'est le seul revêtement de la réponse de Mark:
$integerIDs = array_map('intval', explode(',', $long_string));
Méthode 2
Voici l'approche JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Méthode 3
J'ai proposé celui-ci comme modification de la réponse de Mark. Cela utilise toujours la explode()
fonction, mais au lieu d'appeler, array_map()
j'utilise une foreach
boucle régulière pour faire le travail afin d'éviter la surcharge array_map()
. Je suis également en train d'analyser avec (int)
vs intval()
, mais j'ai essayé les deux, et il n'y a pas beaucoup de différence en termes de performances.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Résultats:
Method 1 Method 2 Method 3
0.4804770947 0.3608930111 0.3387751579
0.4748001099 0.363986969 0.3762528896
0.4625790119 0.3645150661 0.3335959911
0.5065748692 0.3570590019 0.3365750313
0.4803431034 0.4135499001 0.3330330849
0.4510772228 0.4421861172 0.341176033
0.503674984 0.3612480164 0.3561749458
0.5598649979 0.352314949 0.3766179085
0.4573421478 0.3527538776 0.3473439217
0.4863037268 0.3742785454 0.3488383293
L'essentiel est la moyenne. Il semble que la première méthode ait été un peu plus lente pour 1 million d'entiers, mais je n'ai pas remarqué un gain de performances 3 fois supérieur à la méthode 2, comme indiqué dans la réponse. Il s'est avéré que la foreach
boucle était la plus rapide dans mon cas. J'ai fait l'analyse comparative avec Xdebug.
Edit: Cela fait un moment que la réponse n'a pas été publiée à l'origine. Pour clarifier, le benchmark a été fait en php 5.6.