Quindi ero curioso delle prestazioni di alcuni dei metodi citati nelle risposte per un gran numero di numeri interi.
Preparazione
Sto solo creando un array di 1 milione di numeri casuali compresi tra 0 e 100. Quindi, li ho implosi per ottenere la stringa.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Metodo 1
Questo è l'unico esempio della risposta di Mark:
$integerIDs = array_map('intval', explode(',', $long_string));
Metodo 2
Questo è l'approccio JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Metodo 3
Ho pensato a questo come modifica della risposta di Mark. Questo sta ancora usando la explode()
funzione, ma invece di chiamare array_map()
sto usando un foreach
ciclo regolare per fare il lavoro per evitare che l'overhead array_map()
possa avere. Sto anche analizzando il (int)
vs intval()
, ma ho provato entrambi, e non c'è molta differenza in termini di prestazioni.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
risultati:
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
La linea di fondo è la media. Sembra che il primo metodo sia stato un po 'più lento per 1 milione di numeri interi, ma non ho notato un aumento delle prestazioni 3 volte del metodo 2, come indicato nella risposta. Si è scoperto che il foreach
loop era il più veloce nel mio caso. Ho fatto il benchmarking con Xdebug.
Modifica: è passato un po 'di tempo da quando la risposta è stata pubblicata inizialmente. Per chiarire, il benchmark è stato fatto in php 5.6.