PHP/לולאות

מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.

< PHP
קפיצה אל: ניווט, חיפוש

תוכן עניינים

[עריכה] לולאת While

[עריכה] תחביר

לולאת while היא הלולאה הפשוטה ביותר ב PHP. התחביר הבסיסי של לולאת while נראה כך:

while (expression)
     statement;

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

כאשר יש צורך בביצוע של מס' פקודות בכל איטרציה (חזרה) של הלולאה, יש לתחום את הפקודות בסוגריים מסולסלים ({}) בצורה הבאה:

while(expression)
{
     statement;
     statement;
         .
         .
         .
}

תחביר אפשרי נוסף, אם כי לרוב לא מקובל, הוא התחביר while...endwhile אשר נכתב בצורה הבאה:

while(expression):
statement;
     .
     .
endwhile;

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


[עריכה] דוגמאות קוד

[עריכה] דוגמא 1

ביצוע פקודה בודדת בלולאה.

$num = 1;
while ($num < 10)
	$num++;
echo $num;

שים לב כי בלולאה זו, אין תחימה של פקודה או מס' פקודות באמצעות { }, ולכן הלולאה תבצע את הפקודה שאחריה בלבד, ואילו הפקודה, echo $num ,תתבצע רק לאחר יציאה מהלולאה.

דוגמא זו די פשוטה, יש לנו משתנה בשם num ובו הערך 1. בעת כניסה ללולאה נבדק האם num קטן מ 10 במידה וכן, בתוך הלולאה תתבצע הגדלתו של num ב 1. הלולאה תתבצע 9 פעמים, כאשר בפעם התשיעית, יוגדל ערכו של num ל 10, ושוב יבדק הביטוי: האם num קטן מ 10?, ומכיוון ש 10 אינו קטן מ 10, הלולאה לא תתבצע שוב, והמפענח (interpreter), יעבור לפקודה הבאה, שהיא הדפסת הערך של num, במקרה הזה יודפס לנו 10.

[עריכה] דוגמא 2

ביצוע מס' פקודות בלולאה.

$num = 1;
	while ($num < 10)
    {
    	echo $num;
        $num++;
    }
$num = 1;
	while ($num < 10):
    	echo "$num ";
        $num++;
	endwhile;

שתי הלולאות הללו, הן למעשה אותה לולאה אך בתחביר שונה. שתיהן מבצעות בדיוק את אותו הדבר. המשתנה num מקבל את הערך 1. בפעם הראשונה נבדק האם num<10 (האם 1 קטן מ 10), ומכיוון שזהו ביטוי אמת, אנו נכנסים ללולאה בפעם הראשונה, מדפיסים את num ומגדילים את ערכו ב 1, וחוזר חלילה. בפעם התשיעית מודפסת הספרה 9, וערכו של num גדל ל 10, כך שבפעם הבאה שתתבצע הבדיקה, num כבר יהיה שווה ל 10 ולא קטן ממנו. לכן גוף הלולאה לא יתבצע שוב. הפלט שיווצר לנו בכל אחת מן הדוגמאות הנ"ל הוא:

1 2 3 4 5 6 7 8 9

[עריכה] חשוב לזכור

בלולאת while, עקב אופן הפעילות שלה, יש לדאוג שבשלב כלשהו יקבע הביטוי הנבדק כביטוי שקר, אחרת יווצר מצב של לולאה אינסופית.

[עריכה] דוגמא ללולאה אין סופית

$num = 1;
        while ($num < 10)
        {
        	echo $num;
        }

בדוגמא זו נבדק בכל כניסה ללולאה האם num קטן מ 10, אך באף מקום בלולאה לא מוגדל ערכו של num, אלא מודפס בלבד. מכיוון שבדרך זו ערכו של num לעולם לא ישתנה, הביטוי לנצח ישאר אותר אותו ביטוי ( 1< 10) - שזהו ביטוי אמת. לכן הלולאה תמשיך להתבצע שוב ושוב ושוב עד שבמוקדם או במאוחר השרת יעצור את ביצוע התסריט מכיוון שעבר הזמן המירבי שהוגדר לביצוע תסריט של עמוד כלשהו, ותודפס הודעת שגיאה.

[עריכה] לולאת Do...While

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

    do
    {
    	statement;
        statement;
            .
            .
            .
    }
    while (Expression)

בדרך זו, גוף הלולאה יתבצע בפעם הראשונה, ואז יבדק הביטוי Expression. אם יחזיר הביטוי 'אמת', תמשיך הלולאה להתבצע. אם יחזיר 'שקר', תחדל הלולאה מלהתבצע.


[עריכה] דוגמא

   $num = 1;
    do
    {
    	echo $num;
    }
    while ($num < 1)

בדוגמא זו, לפני הכניסה ללולאה מוצב למשתנה num הערך 1. מיד אח"כ מתבצע גוף הלולאה בפעם הראשונה, ומדפיס את ערכו של num. ורק אז מתבצעת הבדיקה להמשך הלולאה, שם נבדק האם num קטן מ 1, מכיוון ש 1 לא קטן מ 1, הלולאה לא תתבצע שוב.

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

[עריכה] לולאת For

לולאות FOR הן דוגמא פשוטה מאוד ללולאות בתכנות. הלולאה הזאת פועלת בצורה כמעט זהה לזאת של לולאת הWHILE, ניתן להגיד שהיא מקרה ייחודי של לולאה הרצה כמות קבועה של פעמים, מעט יותר מהר מWHILE.

[עריכה] תחביר

לולאת FOR מורכבת משלושה חלקים בתוך הסוגריים שלה: הגדרת המשתנה הראשוני; תנאי ההמשכיות; ופעולת ההרצה. הגדרת המשתנה הראשוני נועדה כדי לבחור מאיפה תתחיל הלולאה והספירה. תנאי ההמשכיות הוא הנקודה בה הלולאה תפסיק, ופעולת ההרצה היא שמגדירה מה יקרה בסוף כל הרצה של הלולאה. זה עלול להשמע מסובך בתחילה, אבל זה למעשה פשוט למדי. אם נרצה להריץ לולאה שתרוץ שלושה פעמים, החל מהמספר 1 וכלה במספר 3, נריץ את הלולאה הבאה:

for($i=1;$i<=3;$i++)

ניתן לראות את החוקים הבסיסיים של PHP נוכחים בקלות. תחילה אנו קוראים ללולאת הFOR, ובתוך הסוגריים שלה אנו מגדירים את המשתנה הראשוני. $i הוא שם נפוץ, אבל ניתן להשתמש בכל שם משתנה רצוי. אנו מגדירים ש$i, בתחילת הלולאה, שווה ל1. אנו מסיימים את החלק הראשון בנקודה-פסיק. בחלק השני אנו מגדירים את תנאי ההמשכיות - על הלולאה להמשך כל עוד $i קטן או שווה ל3, נקודה-פסיק. ולבסוף פעולת ההרצה. ++i$ מסמל עלייה במספר אחד (או באות אחת, אם $i הוא ערך מחרוזת). הפונקציה שבתוך לולאת הfor תורץ תחילה כאשר $i שווה לאחד, וכאשר הפונקציה תסתיים, $i יעלה במספר אחד, ויהפוך לשתיים. הפונקציה תורץ שוב. $i יהפוך לשלוש - הוא עדיין בתוך תנאי ההמשכיות של הלולאה. הפונקציה תורץ פעם שלישית, ו$i יוגדר כ4. כעת הוא לא בתוך תנאי ההמשכיות של הלולאה, ולכן הלולאה תפסק. ניקח לדוגמא את הלולאה הבאה:

for($i=1;$i<=3;$i++){
    echo "Loop number $i.\n";
}

התוצאה שתוצג תהיה:

Loop number 1.
Loop number 2.
Loop number 3.

[עריכה] לולאות FOR פחות נפוצות

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

for($i="a";$i!="z";$i++){
    strtoupper($i)+"! ";
}

זה יציג:

A! B! C! D! E! F! G! H! I! J! K! L! M! N! O! P! Q! R! S! T! U! V! W! X! Y!

ישנן וריאציות מרובות של לולאות FOR, ולא ניתן להציג את כולן. אבל שלושת קטעי הלולאה תמיד יהיו תקפים, ותמיד יוכלו להסביר את פעולת הלולאה: הגדרת משתנה ראשוני, תנאי ההמשכיות ופעולת ההרצה.

[עריכה] החסרת פעולות הלולאה ודמיון עם WHILE

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

for($i=1;$i<=3;$i++){
    echo "Loop number $i.\n";
}

היא זהה בפעילות גם אל הלולאה הבאה:

$i = 1;
for(;$i<=3;$i++){
    echo "Loop number $i.\n";
}

והיא שווה לחלוטין אל הלולאה הזאת:

$i = 1;
for(;$i<=3;){
    echo "Loop number $i.\n";
    $i++;
}

שימו לב למיקומי הנקודה-פסיק. צריך לשמור אותם כדי שPHP יוכל לזהות את הקטעים הנכונים כראוי. לבסוף, יש לזכור שהלולאה הזאת זהה אל לולאת הWHILE הבאה:

$i = 1;
while($i<=3){
    echo "Loop number $i.\n";
    $i++;
}

אם כי לולאת הFOR המתאימה מהירה יותר במקצת. ולבסוף, ניתן גם להשתמש בלולאה הבאה, שבה לולאת הFOR כמעט ריקה:

$i = 1;
for(;;){
    if($i<=3)
        break;
    echo "Loop number $i.\n";
    $i++;
}

הלולאה תעבוד כרגיל.

[עריכה] שימושים ללולאת FOR

היתרון היחיד של לולאת הFOR על לולאת הWHILE הוא שלולאת הFOR מהירה במקצת מלולאת הWHILE. תמיד כאשר אפשר, עדיף להשתמש בFOR, אבל לעיתים זה כולל סיבוך מיותר של הקוד, ולכן עדיף השימוש בלולאת הWHILE. בלולאת הFOR עדיף להשתמש כאשר אתה רוצה להריץ פונקציה מספר קבוע של פעמים. למשל, אם אתה רוצה לכתוב את אותה שורת הטקסט מאה פעמים, תוכל להשתמש בלולאת הFOR, כאשר תנאי ההמשכיות שלה הוא שi$ קטן או שווה למאה. לחלופין, אם אתה רוצה להריץ שורת קוד מסויימת כמות בלתי ידועה של פעמים, כמות אשר שמורה בתוך משתנה שנשלף ממסד הנתונים או שהוזן על ידי מבקר, תוכל להגדיר את כמות ההרצות הרצויות בתור x$, ואז להשתמש בלולאה הרגילה, כאשר אתה מחליף את המספר במשתנה:

for($i=1;$i<=$x;$i++){
}

או בקוד הזהה בפעילותו (מלבד הערכים המדוייקים הנשמרים בi$):

for($i=0;$i<$x;$i++){
}

מעבר לכך, רק ההכרות שלכם עם המצב תראה מתי השימוש בלולאת הFOR יותר יעילה.

[עריכה] לולאת Foreach

הפרק הקודם:
מערכים
לולאות הפרק הבא:
פונקציות