Поэтому мне было интересно узнать о производительности некоторых методов, упомянутых в ответах для большого числа целых чисел.
подготовка
Просто создаю массив из 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)
vs intval()
, но я пробовал оба, и с точки зрения производительности нет большой разницы.
$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.