درس اول:
مقایسه حلقه 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";
?>

تشریح کد بالا:

  1. با استفاده از تابع rand در PHP یک آرایه شامل 10 هزار عضو ایجاد می کنیم
  2. با استفاده از تابع microtime تایم شروع عملیات را در یک متغیر ذخیره می کنیم
  3. با استفاده از حلقه For یکبار روی اعضای آرایه می چرخیم
  4. حالا مچددا با استفاده از میکروتایم زمان پایان رو ذخیره کرده و تفاوت آن با زمان شروع را بدست می آوریم
  5. همین مراحل را طی کرده و اینبار از حلقه Foreach استفاده می کنیم و تفاوت این دو را روی صفحه خروجی می دهیم
  6. با اجرای این کد روی لپ تاپ من اعداد زیر بدست آمد

For took: 16.137ms
Foreach took: 0.324ms
نتیجه گیری:
متوجه عمق فاجعه شدید؟
طبق خروجی این مثال
حلقه Foreach بیش از 49 برابر (دقیقا 49.805) سریعتر از حلقه For عمل کرده است