Bu nedenle, çok sayıda tamsayı için verilen cevaplarda belirtilen yöntemlerin bazılarının performansını merak ettim.
Hazırlık
Sadece 0 ile 100 arasında 1 milyon rastgele tamsayı bir dizi oluşturmak. Daha sonra, ben dize almak için onları imploded.
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
Yöntem 1
Mark'ın cevabındaki tek astar:
$integerIDs = array_map('intval', explode(',', $long_string));
Yöntem 2
JSON yaklaşımı budur:
$integerIDs = json_decode('[' . $long_string . ']', true);
Yöntem 3
Bunu Mark'ın cevabının modifikasyonu olarak buldum. Bu hala explode()
işlevini kullanıyor , ancak çağırmak yerine array_map()
düzenli foreach
döngü kullanarak yükü önlemek için iş yapmak array_map()
zorundayım olabilir. Ayrıca (int)
vs ile ayrıştırıyorum intval()
, ama ikisini de denedim ve performans açısından çok fazla fark yok.
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
Sonuçlar:
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
Sonuç olarak ortalama. İlk yöntemin 1 milyon tamsayı için biraz daha yavaş olduğu görülüyor, ancak yanıtta belirtildiği gibi Yöntem 2'nin 3 kat performans kazancı fark etmedim. foreach
Benim durumumda en hızlı olan döngü olduğu ortaya çıktı . Ben Xdebug ile kıyaslama yaptım.
Düzenleme: Cevabın asıl yayınlanmasından bu yana bir süre geçti. Açıklığa kavuşturmak için, karşılaştırma ölçütü php 5.6'da yapılmıştır.