Тож мені було цікаво про ефективність деяких методів, зазначених у відповідях на велику кількість цілих чисел.
Підготовка
Тільки створюючи масив з 1 мільйона випадкових цілих чисел між 0 і 100. Тоді я імплотував їх, щоб отримати рядок.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Спосіб 1
Це один лайнер з відповіді Марка:
$integerIDs = array_map('intval', explode(',', $long_string));
Спосіб 2
Це підхід JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Спосіб 3
Я придумав це як модифікацію відповіді Марка. Це все ще використовує explode()
функцію, але замість виклику array_map()
я використовую звичайний foreach
цикл, щоб виконувати роботу, щоб уникнути накладних витрат array_map()
. Я також розбираюся з (int)
vsintval()
, але я спробував і те, і інше, і щодо продуктивності немає великої різниці.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Результати:
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
Суть - середня. Схоже, перший метод був трохи повільнішим для 1 мільйона цілих чисел, але я не помітив 3-кратного підвищення продуктивності методу 2, як зазначено у відповіді. Виявилося, що foreach
цикл був найшвидшим у моєму випадку. Я зробив бенчмаркінг з Xdebug.
Редагувати: минув час, коли відповідь була розміщена спочатку. Для уточнення тестування було зроблено в php 5.6.