וובמאסטר - תיכנות ובניית אתרים

מדריך PHP: לולאת for

רן בר-זיק ,‏ אינטרנט ישראל‏ ‏/‏ 22 פברואר, 2011
F+
F-

לולאות זה לא רק שם של קישוט אקזוטי אך נדוש לסוכה אלא שם של טכניקה שמאפשרת לנו לעשות כמה פעולות בלי לכתוב אותן שוב פעם.
בואו ונניח שיש לי מערך חביב:

<?php
$my_arr = array(2,4,8,16,32,64);

 

אבל פתאום מגיע הבוס האכזר ורוצה שאנחנו נכפיל בשניים כל איבר במערך. או קיי, זה יחסית פשוט, אנחנו יכולים לעשות את זה:

 

<?php
    $my_arr = array(2,4,8,16,32,64);
    $my_arr[0] *= 2;
    $my_arr[1] *= 2;
    $my_arr[2] *= 2;
    $my_arr[3] *= 2;
    $my_arr[4] *= 2;
    $my_arr[5] *= 2;

אם אתם זוכרים =* זה פשוט לקחת את מה שיש במשתנה, להכפיל אותו במה שיש אחר כך (במקרה הזה 2) ולהכניס אותו חזרה לאותו משתנה. במקרה שלנו המשתנה הוא איבר במערך.
לא צריך להיות גאון תכנות כדי להבין שזו שיטה די דפוקה. דבר ראשון, להתחיל ולעשות copy&paste שוב ושוב זה די מעייף. דבר שני, ואם יש לי במערך 500 איברים? ואם הבוס ירצה מחר להכפיל את זה בשלוש ולא בשתיים?
בדיוק בשביל זה יש לנו לולאת for.

<?php
$my_arr = array(2,4,8,16,32,64);
for($i = 0; $i < 6; $i++) {
    $my_arr[$i] *= 2;
}
print_r($my_arr);

טוב, לפני שמתחילים להתחרפן, בואו ניקח נשימה ארוכה וננתח את מה שהולך פה שורה אחר שורה.
ראשית, לולאת for מתחילה ב-for עם סוגריים:

for(  /*for statement*/  )

בתוך הסוגריים יש את ההצהרה של ה-for שזה לב הלולאה. היא תמיד מורכבת משלושה חלקים.
ראשית, הגדרת האינדקס:

for($i = 0)

האינדקס הוא משתנה חביב שהוא רץ בכל פעם שהלולאה עושה סיבוב. תחשבו על מורה הספורט המעצבן שהיה לכם בבית הספר התיכון והיה מריץ אתכם בריצת 2 קילומטר. בכל סיבוב שעשיתם מסביב למבנה בית הספר, הוא היה מסמן במחברת שלו כמה סיבובים עשיתם – 1,2,3,4 וכך הלאה – כל סיבוב – הוא מוסיף אחד. זה המשתנה הזה. אנחנו יכולים לקרוא לו בכל שם שהוא, אבל מקובל לקרוא לו $i – i על שם אינדקס. אנחנו יכולים לגרום לו שיתחיל מאפס או מכל מספר אחר. במקרה שלנו – מדובר באפס.
שנית, הגדרת זמן הריצה

for($i = 0; $i < 6)

במקרה הזה, אנו מגדירים לו את התנאי (זוכרים שלמדנו על תנאים?) שכל עוד הוא מתקיים, ה-i$ ימשיך לרוץ. במקרה הזה אנו מגדירים ל-$i שימשיך לרוץ כל עוד הוא קטן מ-6. ברגע שהתנאי לא מתקיים, הלולאה מפסיקה להתקיים.
שלישית, הגדרת הצעד

for($i = 0; $i < 6; $i++)

פה אנחנו אומרים ל-i$ כמה להתקדם בכל סיבוב. במקרה הזה, i יעלה ב-1 בכל פעם. אבל אנחנו יכולים לומר לו להתקדם ב-2 בכל פעם:

for($i = 0; $i < 6; $i+=2)

או להכפיל את עצמו בכל פעם או לעשות כל מה שמתחשק לנו.
טוב, בואו נחזור לאדמה וננתח מה הולך פה – בעצם, הלולאה לוקחת משתנה בשם i ומשנה אותו בהתאם לכללים שקבענו בתוך הסוגריים. במקרה הזה:

for($i = 0; $i < 6; $i++)

אני מצווה על המשתנה להתחיל מאפס, ולרוץ צעד אחד בכל פעם ולהמשיך כל עוד מספר הצעדים שלו קטן מ-6. כלומר, הוא ירוץ 5 פעמים.
בתוך הסוגריים המסולסלות קורה הקסם. בכל 'סיבוב' של המשתנה, מה שנמצא בתוך הסוגריים מורץ.
נשמע מסובך? תריצו את:

<?php
    for($i = 0; $i < 6; $i++) {
        print 'hello';
    }

מה שיקרה הוא שאנו נראה את המילה hello חמש פעמים. בכל סיבוב של i יש הדפסה של hello.
אם זה נשמע לכם עדיין לא מובן, שחקו עם זה! נסו להריץ את הלולאה 4 פעמים, או פעמיים בלבד. רק תזהרו לא לשים תנאי בלתי הגיוני, כי אז הלולאה תרוץ אינסוף פעמים והמחשב יתקע...
אחד הדברים השימושיים בלולאה, היא שאני יכול להשתמש ב-i$ בחלק ממה שרץ בלולאה. כך למשל, אם אני רוצה להכפיל כל איבר של המערך שלי בשניים, אני אבצע את זה:

<?php
$my_arr = array(2,4,8,16,32,64);

for($i = 0; $i < 6; $i++) {
    $my_arr[$i] *= 2;
}

print_r($my_arr);

 

אז מה הולך כאן. יש לי מערך, יש לי לולאה עם i שמתחיל באפס, מתקדם כל פעם בצעד אחד ורץ כל עוד הוא קטן מאפס. הערך של ה-i מתחיל באפס וממשיך לאחד, שניים, שלושה, ארבעה, חמישה ואז עוצר. בכל ריצה, הערך של i$ משתנה ואני יכול להשתמש בו! גאוני, לא?
לולאות הן דבר שקשה להבין, אבל לפעמים אפשר להבין 'דרך הרגליים' – תתרגלו את הלולאות שוב ושוב, תכתבו לולאות משלכם שמטפלות במערך שלכם ותבינו את ההגיון.
בתוך הסוגריים המסולסלות אפשר לכתוב כמה דברים שרוצים ואפילו להכניס לולאה לתוך לולאה. הדוגמא הכי טובה היא הדפסה של לוח הכפל:

 

<?php
print '<table border=\'1\'>';
for($i = 0; $i <= 10; $i++) {
    print '<tr>';
    for ($j=1; $j<=10; $j++) {   
        $number = $i*$j;
        print "<td>$number</td>";
    }
    print '</tr>';
}
print '</table>';

בהתחלה אני יוצר לולאה שרצה 10 פעמים ויוצרת את השורות (<tr>), בכל פעם כזו, רצה לולאה אחרת בסך 10 פעמים שמדפיסה את התאים, בכל תא יש את המכפלה בדיוק כמו בלוח הכפל. פשוט ביותר!
הקוד נראה מבלבל בהתחלה, אבל אם תנסו להבין אותו, תעשו לו copy&paste ותתעללו בו קצת, תבינו מה הוא עושה.
עוד משהו ששווה לדבר עליו הוא ה-escaping – כפי שניתן לראות, השתמשתי ב-\ כדי להכניס את התו ' (מרכאה בודדת), זה נעשה כיוון שאני משתמש במרכאה בודדת להכיל את מחרוזת הטקסט ואם אני אשתמש שוב במרכאה בודדת, אז מחרוזת הטקסט תשבר ואני אקבל שגיאה. בגלל זה אני שם את התו \ לפני על מנת לסמן ל-PHP  שמדובר בתו שהוא חלק ממחרוזת טקסט ולא בתו שהוא חלק מהקוד.

רן בר-זיק, אינטרנט ישראל

מתכנת PHP מנוסה ובעל ידע רב בפיתוח לאינטרנט על בסיס LAMP. מומחה במערכות דרופל, ג'ומלה ו-וורדפרס. שולט היטב בכל מה שקשור לפרונט אנד: JavaScript: jQuery ו-MooTools,ActionScript 2/3 וכמובן HTML 5 + CSS 3.

אינטרנט ישראל: www.internet-israel.com
תגיות: PHP‏  /  מדריך‏  /  לולאות‏  /  FOR‏  

תגובות בפייסבוק

תגובות למאמר



עוד במדריך

תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות