เปรียบเทียบความเร็วระหว่าง for และ foreach
เป็นการทดสอบและการเปรียบเทียบความเร็วในการใช้งาน for และ foreach ในการเข้าถึงข้อมูลชนิดแอเรย์
รูปแบบแรกเป็นการวนลูปอ่านข้อมูลจากแอเรย์ด้วย for ซึ่งข้อมูลที่อ่านได้อยู่ที่ $key และ $value
รูปแบบที่สอง ใช้ foreach ในการวนลูปเข้าถึงข้อมูลจากแอเรย์ ซึ่งข้อมูลที่อ่านได้อยูที่ $key และ $value เช่นกัน
ผลการทดสอบบน PHP 4 เวอร์ชั่นในเครื่องเดียวกัน
โค้ดที่ใช้ทดสอบ
รูปแบบแรกเป็นการวนลูปอ่านข้อมูลจากแอเรย์ด้วย for ซึ่งข้อมูลที่อ่านได้อยู่ที่ $key และ $value
for ($key = 0; $key < $l; $key++) {
$value = $val[$key];
}
รูปแบบที่สอง ใช้ foreach ในการวนลูปเข้าถึงข้อมูลจากแอเรย์ ซึ่งข้อมูลที่อ่านได้อยูที่ $key และ $value เช่นกัน
foreach ($val as $key => $value) {
}
ผลการทดสอบบน PHP 4 เวอร์ชั่นในเครื่องเดียวกัน
Current PHP version: 5.2.17
0.00098302364349365 (for)
0.00072287321090698 (foreach)
Current PHP version: 5.4.45
0.00062953233718872 (for)
0.00042906999588013 (foreach)
Current PHP version: 5.6.14
0.00055515766143799 (for)
0.00037569999694824 (foreach)
Current PHP version: 7.1.0-dev
0.00033975839614868 (for)
0.00022429227828979 (foreach)
โค้ดที่ใช้ทดสอบ
// จำนวนครั้งการทดสอบ
$max = 100;
// จำนวนรอบการทดสอบ ผลลัพท์เฉลี่ยจากค่านี้
$count = 20;
// แอเรย์เก็บผลลัพท์
$ret = array(0, 0);
// ข้อมูล
$val = array();
for ($i = 0; $i < 100; $i++) {
$val[] = $i;
}
$l = sizeof($val);
for ($m = 0; $m < $count; $m++) {
// for
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
for ($key = 0; $key < $l; $key++) {
$value = $val[$key];
}
}
$ret[0] += microtime(true) - $start;
// foreach
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
foreach ($val as $key => $value) {
}
}
$ret[1] += microtime(true) - $start;
usleep(10240);
}
echo 'Current PHP version: '.phpversion().'<br>';
echo ($ret[0] / $count).' (for)<br>';
echo ($ret[1] / $count).' (foreach)<br>';