Así que tenía curiosidad sobre el rendimiento de algunos de los métodos mencionados en las respuestas para una gran cantidad de enteros.
Preparación
Simplemente creando una matriz de 1 millón de enteros aleatorios entre 0 y 100. Luego, les imploré que obtuvieran la cadena.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Método 1
Este es el revestimiento de la respuesta de Mark:
$integerIDs = array_map('intval', explode(',', $long_string));
Método 2
Este es el enfoque JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Método 3
Se me ocurrió esta como modificación de la respuesta de Mark. Esto todavía está usando la explode()
función, pero en lugar de llamar array_map()
, estoy usando un foreach
bucle regular para hacer el trabajo para evitar la sobrecarga array_map()
. También estoy analizando con (int)
vs intval()
, pero probé ambos, y no hay mucha diferencia en términos de rendimiento.
$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
El resultado final es el promedio. Parece que el primer método fue un poco más lento para 1 millón de enteros, pero no noté una ganancia de rendimiento 3 veces superior al Método 2 como se indica en la respuesta. Resultó que el foreach
bucle fue el más rápido en mi caso. He hecho el benchmarking con Xdebug.
Editar: ha pasado un tiempo desde que la respuesta se publicó originalmente. Para aclarar, el punto de referencia se realizó en php 5.6.