תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

מדריך PHP – לולאת foreach

מחבר:
בתאריך:

 

לולאות בתכנות הן דבר הכרחי מפני שהן מאפשרות למתכנת לחזור על פעולה מסוימת כמה שצריך. לולאת foreach היא לולאה מיוחדת שמאפשרת לרוץ על מערך (array) לפי מספר הפריטים שקיימים בו.

 

לולאת foreach פשוטה

תחביר לולאת ה-foreach הוא הבא:

foreach(שם_המערך as משתנה){
  בלוק של קוד//
}

 

ובאופן פורמלי יותר:

foreach($array as $value)}
  בלוק של קוד//
}

 

מה שלולאת foreach יודעת לעשות הוא לקחת את המערך שמוצב לתוכה ($array), ולרוץ עליו מספר פעמים כמספר הפריטים במערך (לדוגמה, על מערך שמכיל חמישה פרטים, תרוץ הלולאה 5 פעמים), כשהיא מציבה כל פריט בתורו לתוך המשתנה $value. בפעם הראשונה שהיא רצה, תציב הלולאה את הפריט הראשון מתוך המערך, בפעם השנייה את הפריט השני, וכיו"ב, כמספר הפריטים במערך. הדוגמה הבאה תבהיר את הנקודה, נניח שיש לנו מערך פשוט עם משקלם של חמישה אנשים, ואנחנו רוצים להציג את כל המידע במערך. הקוד ייראה משהו כזה:

<?php
//המערך הפשוט
$weights = array (80, 65, 90.5, 73, 48);
//שתציג את המידע במערך foreach לולאת 
foreach($weights as $weight){
   echo "משקל: ".$weight."<br />";
}

והתוצאה היא הבאה:

משקל: 80
משקל: 65
משקל: 90.5
משקל: 73
משקל: 48

מזה אפשר ללמוד, שבכל ריצה של הלולאה הערך שמקבל $value הוא ערכו של הפריט התורן במערך.

 

מערך רגיל מכיל מידע חבוי נוסף, שהוא האינדקס של כל פריט או מספרו הסידורי במערך (0, 1, 2 ...). כדי להציג את האינדקס נשתמש בתחביר הבא:

foreach($array as $index => $value)}
  בלוק של קוד//
}

 

$array הוא שמו של המערך.

$index הוא המספר הסידורי של הפריט.

$value אילו הערכים.

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

<?php
//המערך הפשוט
$weights = array (80, 65, 90.5, 73, 48);

//שתציג את המידע במערך foreach לולאת 
foreach($weights as $index => $value){
   echo $index." : ".$value."<br />";
}

 

התוצאה של הקוד היא הבאה:

0 : 80
1 : 65
2 : 90.5
3 : 73
4 : 48

אפשר לראות שהאינדקס מתחיל מ-0, וזה מפני שמחשבים מתחילים לספור מאפס.

 

לולאת foreach עבור מערך שיוכי (אסוציאטיבי)

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

<?php
$personals = array("name" => "Yossi", "color" => "blue", "food" => "falafel");

כדי להריץ על המערך לולאת foreach נשתמש בתחביר הבא, שמחקה את המבנה של מערך אסוציאטיבי:

foreach($array as $key => $value)}
    בלוק של קוד
}

$array הוא שמו של המערך (במקרה זה, associative$).

$key אילו המפתחות, ובדוגמה: name, color, food.

$value אילו הערכים, שהם: Yossi, blue, falafel.

לולאת foreach שתציג את המידע שכלול במערך, עשויה להראות כך:

<?php
foreach($personals as $key => $value){
  echo $key. " : ".$value."<br />";
}

והתוצאה היא הבאה:

name : Yossi
color : blue
food : falafel

 

לולאת foreach עבור מערך רב-ממדי

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

<?php
$players = array(
"אבי" => array(
  "נחוש" <= "אופי",
  "קלע" <= "תפקיד",
  "2.01" <= "גובה"
),
"יורם" => array(
  "אופי" => "",
  "שומר" <= "תפקיד",
  "1.93 <= "גובה
),
"משה" => array(
  "נחוש" <= "אופי",
  "שומר" <= "תפקיד",
  "1.83 <= "גובה
),
"צביקה" => array(
  "לא נחוש" <= "אופי",
  "קלע" <= "תפקיד",
  "1.97 <= "גובה
),
"יפתח" => array(
  "נחוש" <= "אופי",
  "קלע" <= "תפקיד",
  "2.00" <= "גובה"
),
"רמי" => array(
  "לא נחוש" <= "אופי",
  "שומר" <= "תפקיד",
  "1.84" <= "גובה"
)
);

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

<?php
foreach($players as $player => $items)
{
  //קוד עבור המערך החיצוני
  foreach($items as $item => $value)
  {
    קוד עבור המערכים הפנימיים//
    שמתייחסים לכל שחקן בנפרד//
  }
}

 

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

<?php
//הכנת המשתנים
$build = "";//המשתנה שבונה את ההטמ"ל
$i=1;//מספר השחקנים לפי מספר הפעמים שרצה הלולאה החיצונית

$build .= "<table border='1' cellspacing='0'>";
$build .= '<tr><th>מס"ד</th><th>השחקן</th><th>אופי</th><th>תפקיד</th><th>גובה</th></tr>';//שורת הכותרת
foreach($players as $player => $items){
  $build .= "<tr><td>".$i."</td>";//שם ומס"ד לפי המערך החיצוני
  $build .= "<td>".$player."</td>";

   foreach($items as $item => $value){
    $build .= "<td>".$value."</td>";//כל שאר הערכים לפי המערכים הפנימיים
  }
	  
  $build .= "</tr>";
	
  $i++;
}

$build .= "</table>";

//מדפיסים את התוצאה למסך
echo $build;

 

זה פלט התכנית:

מס"ד שחקן אופי תפקיד גובה
1 אבי נחוש קלע 2.01
2 יורם שומר 1.93
3 משה נחוש שומר 1.83
4 צביקה לא נחוש קלע 1.97
5 יפתח נחוש קלע 2.00
6 רמי לא נחוש שומר 1.84

 

במדריך הבא תוכלו ללמוד על הטמעת PHP ב-HTML

לכל מדריכי ה-PHP

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?

 

תמונת המגיב

מוטי בתאריך: 14.05.2014

איזה יופי !

תמונת המגיב

סרגיי בתאריך: 30.12.2017

הקוד האחרון מציג בעיה זו :PHP Notice: Undefined variable: players in /home/cg/root/1876743/main.php on line 17 PHP Warning: Invalid argument supplied for foreach() in /home/cg/root/1876743/main.php on line 17