Так что мне было интересно узнать о производительности некоторых методов, упомянутых в ответах для большого числа целых чисел.
Подготовка
Просто создаю массив из 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)
против 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 миллиона целых чисел, но я не заметил трехкратного увеличения производительности метода 2, как указано в ответе. Оказалось, цикл foreach
был самым быстрым в моем случае. Я сделал бенчмаркинг с Xdebug.
Редактировать: Прошло много времени с тех пор, как ответ был первоначально опубликован. Чтобы уточнить, тест был сделан в php 5.6.