GORAGOD.com

เปรียบเทียบความเร็วระหว่าง for และ foreach

เป็นการทดสอบและการเปรียบเทียบความเร็วในการใช้งาน for และ foreach ในการเข้าถึงข้อมูลชนิดแอเรย์

รูปแบบแรกเป็นการวนลูปอ่านข้อมูลจากแอเรย์ด้วย 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>';