Secara umum, ada tiga metode untuk melintasi array, for, while, dan foreach. Yang paling sederhana dan nyaman adalah foreach. Lalu apa perbedaan pengoperasian dan performa di antara keduanya?
Mari kita uji terlebih dahulu waktu yang diperlukan untuk melintasi array satu dimensi dengan 50.000 subskrip:
Platform pengujian:
CPU: PM 725
Memori: 512M
Harddisk: 40G 5400 rpm
OS: Windows XP SP2
WEB: kode pengujian Apache 2.0.54 php5.0.4
:
<?php
/*
*@Penulis: Lilov
* @ Beranda: www.codesky.com
* @ Email: [email protected]
*
*/
$arr = susunan();
untuk($i = 0; $i < 50000; $i++){
$arr[] = $i*rand(1000,9999);
}
fungsi GetRunTime()
{
list($usec,$detik)=meledak(" ",microtime());
return ((mengambang)$usec+(mengambang)$detik);
}
#######################################
$time_start = GetRunTime();
untuk($i = 0; $i < hitungan($arr); $i++){
$str .= $arr[$i];
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Waktu yang digunakan untuk:'.round($time_used, 7).'(s)<br><br>';
tidak disetel($str, $waktu_mulai, $waktu_akhir, $waktu_digunakan);
#######################################
$time_start = GetRunTime();
while(daftar($kunci, $val) = masing-masing($arr)){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Waktu yang terpakai sementara:'.round($time_used, 7).'(s)<br><br>';
tidak disetel($str, $kunci, $val, $waktu_mulai, $waktu_akhir, $waktu_digunakan);
#######################################
$time_start = GetRunTime();
foreach($arr sebagai $kunci => $val){
$str .= $val;
}
$time_end = GetRunTime();
$waktu_digunakan = $waktu_akhir - $waktu_mulai;
echo 'Waktu foreach yang digunakan:'.round($time_used, 7).'(s)<br><br>';
######################################
?>
Hasil tes:
rata-rata ketiga hasil tes :
Sesuai dengan for, while, foreach masing-masing
0,1311650
0,1666853
0.1237440
Setelah pengujian berulang kali, hasilnya menunjukkan bahwa untuk melintasi array yang sama, foreach adalah yang tercepat, dan paling lambat adalah while. foreach sekitar 20% ~ 30% lebih cepat dibandingkan while. Kemudian tingkatkan subskrip array menjadi 500000 dan 5000000, dan hasil pengujiannya sama. Namun dari sudut pandang prinsip, foreach beroperasi pada salinan array (dengan menyalin array), sedangkan while beroperasi dengan memindahkan indeks internal array. Secara umum, diyakini bahwa while harus lebih cepat daripada foreach (karena foreach pertama-tama menempatkan array yang disalin, sementara while menggerakkan penunjuk internal secara langsung), tetapi hasilnya justru sebaliknya. Alasannya adalah karena foreach merupakan implementasi internal PHP, sedangkan while merupakan struktur loop umum.
Oleh karena itu, dalam aplikasi umum, saya lebih suka menggunakan formulir foreach yang sederhana dan efisien. Di bawah PHP5, foreach juga dapat melintasi atribut suatu kelas.