درس اول:
مقایسه حلقه For و Foreach در PHP
در برنامه نویسی Collection به هر نوع موجودیتی که حاوی بیش از یک key = value است گفته می شود
مانند Array, List, Enum, ...
همیشه وقتی با Collection ها سر و کار داریم باید از foreach به جای سایر حلقه ها استفاده کنیم، Foreach نوعی از LOOP (حلقه) ها در PHP و سایر زبان های خانواده C است که مخصوص کار با این نوع از داده های است.
به این مثال دقت کنید
صورت مسئله:
می خواهیم سرعت حلقه For و حلقه Foreach را در شرایط یکسان بررسی کنیم
<?php
$elements = array();
////
// An array of 10,000 elements with random string values
////
for($i = 0; $i < 10000; $i++) {
$elements[] = (string)rand(10000000, 99999999);
}
$time_start = microtime(true);
////
// for test
////
for($i = 0; $i < count($elements); $i++) { }
$time_end = microtime(true);
$for_time = $time_end - $time_start;
$time_start = microtime(true);
////
// foreach test
////
foreach($elements as $element) { }
$time_end = microtime(true);
$foreach_time = $time_end - $time_start;
echo "For took: " . number_format($for_time * 1000, 3) . "ms\n";
echo "Foreach took: " . number_format($foreach_time * 1000, 3) . "ms\n";
?>
تشریح کد بالا:
- با استفاده از تابع rand در PHP یک آرایه شامل 10 هزار عضو ایجاد می کنیم
- با استفاده از تابع microtime تایم شروع عملیات را در یک متغیر ذخیره می کنیم
- با استفاده از حلقه For یکبار روی اعضای آرایه می چرخیم
- حالا مچددا با استفاده از میکروتایم زمان پایان رو ذخیره کرده و تفاوت آن با زمان شروع را بدست می آوریم
- همین مراحل را طی کرده و اینبار از حلقه Foreach استفاده می کنیم و تفاوت این دو را روی صفحه خروجی می دهیم
- با اجرای این کد روی لپ تاپ من اعداد زیر بدست آمد
For took: 16.137ms
Foreach took: 0.324ms
نتیجه گیری:
متوجه عمق فاجعه شدید؟
طبق خروجی این مثال
حلقه Foreach بیش از 49 برابر (دقیقا 49.805) سریعتر از حلقه For عمل کرده است