Forum und email

foreach

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

foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement

בצורה הראשונה הלולאה רצה לאורכו של המערך array_expression. בכל איטרציה ערכו של תא מהמערך מוצב במשתנה $value וערכו של מצביע פנימי למערך מקודם לאבר הבא (כך שבלולאה הבאה תקבל את ערכו של האבר הבא).

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

Note: כאשר מתחיל ביצוע לולאת foreach, ערכו של המצביע הפנימי מאותחל לאבר הראשון במערך. כלומר, אין צורך לבצע קריאה לפונקציה reset() לפני לולאת foreach.

Note: שים לב גם לכך שלולאת foreach פועלת על שיכפול של המערך המסויים ולא על המערך עצמו ולכן ערכו של מצביע המערך אינו משתנה כמו בפקודת each().

Note: לולאת foreach לא תומכת בהשקטת הוראות שגיאה בעזרת '@'.

הלולאות הבאות זהות מבחינה פונקציונאלית:

reset ($arr);
while (list(, $value) = each ($arr)) {
    echo "Value: $value<br>\n";
}

foreach ($arr as $value) {
    echo "Value: $value<br>\n";
}
גם הדוגמאות הבאות זהות:
reset ($arr);
while (list($key, $value) = each ($arr)) {
    echo "Key: $key; Value: $value<br>\n";
}

foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br>\n";
}

הנה דוגמאות נוספת:

/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "Current value of \$a: $v.\n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach($a as $v) {
    print "\$a[$i] => $v.\n";
}

/* foreach example 3: key and value */

$a = array (
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);

foreach($a as $k => $v) {
    print "\$a[$k] => $v.\n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach($a as $v1) {
    foreach ($v1 as $v2) {
        print "$v2\n";
    }
}

/* foreach example 5: dynamic arrays */

foreach(array(1, 2, 3, 4, 5) as $v) {
    print "$v\n";
}