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 crée juste un tableau de 1 million d'entiers aléatoires entre 0 et 100. Ensuite, je les ai fait imploser pour obtenir la chaîne.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Méthode 1 Voici la réponse de Mark :
$integerIDs = array_map('intval', explode(',', $long_string));
Méthode 2
C'est l'approche JSON :
$integerIDs = json_decode('[' . $long_string . ']', true);
Méthode 3 Je suis arrivé à cette méthode en modifiant la réponse de Mark. Elle utilise toujours explode()
mais au lieu d'appeler array_map()
J'utilise la méthode normale foreach
pour faire le travail afin d'éviter les frais généraux. array_map()
pourrait avoir. J'analyse également les données 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
La ligne de fond est la moyenne. Il semble que la première méthode était un peu plus lente pour 1 million d'entiers, mais je n'ai pas remarqué un gain de performance de 3x la méthode 2 comme indiqué dans la réponse. Il s'est avéré que foreach
loop était le plus rapide dans mon cas. J'ai fait le benchmarking avec Xdebug.
Edit : Cela fait un moment que la réponse a été postée à l'origine. Pour clarifier, le benchmark a été fait en php 5.6.40.
1 votes
Pour les chercheurs qui recherchent une solution adaptée aux données multidimensionnelles, veuillez consulter cette question similaire : stackoverflow.com/questions/27147105/