Então, fiquei curioso sobre o desempenho de alguns dos métodos mencionados nas respostas para um grande número de números inteiros.
Preparação
Apenas criando uma matriz de 1 milhão de números inteiros aleatórios entre 0 e 100. Então, eu os implodi para obter a sequência.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Método 1
Este é o argumento da resposta de Mark:
$integerIDs = array_map('intval', explode(',', $long_string));
Método 2
Esta é a abordagem JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Método 3
Eu vim com este aqui como modificação da resposta de Mark. Isso ainda está usando a explode()
função, mas, em vez de chamar array_map()
, estou usando um foreach
loop regular para fazer o trabalho para evitar a sobrecarga array_map()
. Também estou analisando com (int)
vs intval()
, mas tentei ambos, e não há muita diferença em termos de desempenho.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Resultados:
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
A linha inferior é a média. Parece que o primeiro método foi um pouco mais lento para 1 milhão de números inteiros, mas não notei um ganho de desempenho 3x do Método 2, conforme indicado na resposta. Acabou que o foreach
loop foi o mais rápido no meu caso. Eu fiz o benchmarking com o Xdebug.
Editar: Já faz um tempo desde que a resposta foi postada originalmente. Para esclarecer, o benchmark foi realizado no php 5.6.