Byłem więc ciekawy wydajności niektórych metod wymienionych w odpowiedziach na dużą liczbę liczb całkowitych.
Przygotowanie
Właśnie stworzyłem tablicę 1 miliona losowych liczb całkowitych od 0 do 100. Następnie zaimplodowałem je, aby uzyskać ciąg.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Metoda 1
To jest jedna linijka z odpowiedzi Marka:
$integerIDs = array_map('intval', explode(',', $long_string));
Metoda 2
Oto podejście JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Metoda 3
Wymyśliłem ten jako modyfikację odpowiedzi Marka. To wciąż jest używaneexplode()
funkcji, ale zamiast wywoływać array_map()
, używam regularnej foreach
pętli, aby wykonać pracę, aby uniknąć narzutu array_map()
. Parsuję też z (int)
vs intval()
, ale wypróbowałem oba, i nie ma dużej różnicy pod względem wydajności.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Wyniki:
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
Dolna linia to średnia. Wygląda na to, że pierwsza metoda była nieco wolniejsza dla 1 miliona liczb całkowitych, ale nie zauważyłem 3-krotnego wzrostu wydajności metody 2, jak stwierdzono w odpowiedzi. Okazało sięforeach
pętla była najszybsza w moim przypadku. Przeprowadziłem testy porównawcze z Xdebug.
Edycja: Minęło trochę czasu, odkąd pierwotnie opublikowano odpowiedź. Aby to wyjaśnić, test został przeprowadzony w php 5.6.