foreach
Στην PHP 4 (και οχι στην PHP 3) συμπεριλαμβάνεται η δομή foreach , όπως στην Perl και σε μερικές άλλες γλώσσες. Αυτό απλά δίνει έναν εύκολο τρόπο να προσπελαύνετε τους πίνακες (arrays). Η foreach χρησιμοποιείται μόνο με πίνακες, και θα εμφανιστεί λάθος αν προσπαθήσετε να τη χρησιμοποιήσετε σε μια μεταβλητή διαφορετικού τύπου ή σε μια μεταβλητή που δεν έχει αρχικοποιηθεί. Υπάρχουν δυο τρόποι σύνταξης. Ο δεύτερος είναι μια ελάχιστη αλλά πολύ σημαντική βελτίωση του πρώτου:
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
Η πρώτη φόρμα προσπελαύνει τον array σύμφωνα με την array_expression. Σε κάθε loop, η τιμή του τρέχοντος στοιχείου ανατίθεται στην $value και ο εσωτερικός δείκτης του πίνακα αυξάνεται κατά ένα (έτσι ώστε στο επόμενο loop, θα μπορείτε να δείτε το επόμενο στοιχείο).
Η δεύτερη φόρμα κάνει το ίδιο πράγμα, εκτός από το ότι το τρέχον στοιχείο του κλειδιού θα ανατίθεται στη μεταβλητή $key σε κάθε loop.
Note: Όταν η foreach αρχίζει αρχικά να εκτελείται, ο εσωτερικός δείκτης του πίνακα αυτόματα πηγαίνει στο πρώτο στοιχείο του πίνακα. Αυτό σημαίνει ότι δεν χρειάζεται να καλέσετε τη συνάρτηση reset() πριν από κάθε foreach loop.
Note: Επίσης, σημειώστε ότι η foreach εκτελείται σε ένα αντίγραφο του συγκεκριμένου πίνακα, όχι στον ίδιο τον πίνακα, συνεπώς ο δείκτης του πίνακα δεν αλλάζει όπως με τη δομή each() και αλλαγές στο στοιχείο του πίνακα που επιστρέφεται δεν επηρεάζουν τον αρχικό πίνακα. Παρόλαυτα, ο εσωτερικός δείκτης του αρχικού πίνακα αυξάνεται καθώς επεξεργαζόμαστε τον πίνακα. Υποθέτοντας ότι το foreach loop ολοκληρώνεται, ο εσωτερικός δείκτης του πίνακα θα είναι στο τέλος του πίνακα.
Note: Η foreach δεν υποστηρίζει τη δυνατότητα να καταστείλει τα μηνύματα λάθους χρησιμοποιώντας το '@'.
Ίσως έχετε παρατηρήσει ότι τα ακόλουθα έχουν την ίδια λειτουργία:
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
echo "Value: $value<br>\n";
}
?>
<?php
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";
}
?>
Μερικά ακόμη παραδείγματα για να καταλάβετε τη χρήση:
<?php
/* 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";
$i++;
}
/* 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";
}
?>