for ($i = 0; $i < 5; $i++) { ... } מריצה את הבלוק מספר קבוע של פעמים. שלושת החלקים הם ההתחלה ($i = 0, רצה פעם אחת), התנאי ($i < 5, נבדק לפני כל סבב) והצעד ($i++, רץ אחרי כל סבב). הלולאה מסתיימת ברגע שהתנאי שקרי.
$i עדיין קיים אחרי הלולאה ומחזיק את הערך שהפך את התנאי לשקרי (6). ב-PHP אין טווח בלוק למשתני לולאה.
מעבר על מערך עם אינדקס
ברשימה עם המפתחות 0, 1, 2 ..., המונה משמש גם כאינדקס. שמרו קודם את count() במשתנה כדי שהיא לא תיקרא שוב בכל סבב.
החלק הראשון יכול להכיל כמה ביטויים מופרדים בפסיקים, וכך $n = count($fruits) מוגדר פעם אחת. כשאתם צריכים רק כל ערך (ולא את השכנים שלו), foreach קצרה יותר ועובדת גם על מערכים שהמפתחות שלהם אינם 0 עד n - 1.
ספירה לאחור וצעד גדול מ-1
הצעד יכול להיות כל ביטוי: $i-- לספירה לאחור, $i += 2 לכל מספר שני, $i *= 2 לחזקות של שתיים.
range('a', 'h') בונה את המערך ['a', 'b', ... 'h']. עם range(1, 10) ו-foreach מקבלים את אותה ספירה כמו בלולאת for, במחיר של בניית המערך כולו קודם.
break ו-continue
break מסיים את הלולאה מיד. continue מדלג על שאר הסבב הנוכחי וקופץ לצעד ולבדיקת התנאי הבאה.
ללולאה השנייה יש תנאי ריק, שפירושו "תמיד אמת", ולכן היא רצה עד break. בלולאות מקוננות, break 2 ו-continue 2 פועלים על הלולאה החיצונית, כפי שהדוגמה הבאה מראה.
לולאות for מקוננות: לוח הכפל
לולאה בתוך לולאה מריצה את הלולאה הפנימית במלואה בכל סבב של החיצונית. כאן הפלט הוא HTML, ולכן הלשונית Page מציגה טבלה אמיתית.
שנו את $size ל-12 והריצו שוב. הצורה for (...): ו-endfor; היא התחביר החלופי ששומר על לולאות קריאות בין תגיות HTML. אותה טבלה בנויה כטקסט פשוט, ועם break 2 כדי לעצור את שתי הלולאות:
טעויות נפוצות: חריגה באחד והלולאה האינסופית
שני הבאגים הקלאסיים של for: שימוש ב-<= עם count() קורא איבר אחד אחרי הסוף, ו-PHP מדווחת על כך כ-Warning: Undefined array key 3 ומתייחסת אליו כ-null; וצעד שאף פעם לא מקדם את המונה לכיוון הסוף ($i-- כשהתכוונתם ל-$i++) משאיר את התנאי אמת לנצח.
ללולאות שאת האורך שלהן אי אפשר לדעת מראש, כמו קריאה עד סוף קובץ, לולאת while מתאימה יותר.
שאלות נפוצות
איך עוברים על מערך עם אינדקס ב-PHP?
לרשימה עם המפתחות 0, 1, 2 השתמשו ב-for ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; }. ברוב הקוד foreach ($arr as $i => $value) פשוטה יותר, נותנת את אותו אינדקס, ועובדת גם כשהמפתחות אינם 0 עד n פחות 1.
איך יוצאים מלולאת for ב-PHP?
break; יוצא מהלולאה מיד. בתוך לולאות מקוננות, break 2; יוצא מהלולאה הפנימית ומזו שסביבה. continue; מדלג על שאר הסבב הנוכחי ועובר לסבב הבא.
איך סופרים לאחור עם לולאת for ב-PHP?
התחילו גבוה, השוו עם >= והפחיתו: for ($i = 10; $i >= 1; $i--) { echo $i; }. לצעדים שאינם אחד, שנו את החלק השלישי, למשל $i += 2 או $i -= 5.
מתי להשתמש ב-for במקום ב-foreach ב-PHP?
השתמשו ב-for כשאתם סופרים משהו (לחזור 5 פעמים, מספרים מ-1 עד 100, כל איבר שני) או צריכים את האיבר הבא או הקודם לפי אינדקס. השתמשו ב-foreach כדי לעבור על כל איבר במערך, במיוחד במערכים אסוציאטיביים, שבהם אין אינדקס מספרי.