Forum und email

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 (12317);

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

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

$a = array (12317);

$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(12345) as $v) {
    print 
"$v\n";
}
?>