Jadi saya ingin tahu tentang kinerja beberapa metode yang disebutkan dalam jawaban untuk sejumlah besar bilangan bulat.
Persiapan
Hanya membuat array 1 juta bilangan bulat acak antara 0 dan 100. Lalu, saya membuat mereka untuk mendapatkan string.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Metode 1
Ini adalah satu kalimat dari jawaban Markus:
$integerIDs = array_map('intval', explode(',', $long_string));
Metode 2
Ini adalah pendekatan JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
Metode 3
Saya datang dengan yang ini sebagai modifikasi dari jawaban Markus. Ini masih menggunakan explode()
fungsi, tetapi alih-alih memanggil array_map()
saya menggunakan foreach
loop biasa untuk melakukan pekerjaan untuk menghindari overhead yang array_map()
mungkin terjadi. Saya juga parsing dengan (int)
vs intval()
, tetapi saya mencoba keduanya, dan tidak ada banyak perbedaan dalam hal kinerja.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Hasil:
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
Intinya adalah rata-rata. Sepertinya metode pertama sedikit lebih lambat untuk 1 juta bilangan bulat, tapi saya tidak melihat peningkatan kinerja 3x dari Metode 2 seperti yang dinyatakan dalam jawaban. Ternyata foreach
loop adalah yang tercepat dalam kasus saya. Saya telah melakukan pembandingan dengan Xdebug.
Sunting: Sudah lama sejak jawaban awalnya diposting. Untuk memperjelas, benchmark dilakukan di php 5.6.