Χρήση της foreach() για βρόχο σε πίνακα της PHP

09 Αυγ 2011 | PHP

Δεν επιτρέπονται τα σχόλια.


Συχνά θα θέλετε να προσπελάσετε όλα τα στοιχεία ενός πίνακα στην PHP για να πραγματοποιήσετε κάποιες εργασίες στα στοιχεία του πίνακα σας. Για παράδειγμα μπορεί να θέλετε να εμφανίσετε τα στοιχεία ενός πίνακα σε ένα πίνακα της HTML.

Στο άρθρο Καταμέτρηση στοιχείων πίνακα με την count() σας έδειξα τον τρόπο να πραγματοποιήσετε βρόχο στα στοιχεία του πίνακα με τη συνάρτηση count() και το βρόχο for(). Ωστόσο υπάρχει ακόμα ποιο εύκολος τρόπος για να προσπελάσουμε τα στοιχεία ενός πίνακα της PHP. Για να προσπελάσετε ακόμα ποιο εύκολα τα στοιχεία του πίνακα μπορείτε να χρησιμοποιήσετε το βρόχο foreach().

Σε αυτό το άρθρο θα δούμε τη βασική χρήση του βρόχου foreach(), καθώς επίσης θα μάθουμε πως θα κάνουμε βρόχο πάνω από πίνακες με δείκτες και με πίνακες με σχέσεις.

Βρόχος στα στοιχεία του πίνακα

Ο ευκολότερος τρόπος να χρησιμοποιήσουμε το βρόχο foreach() είναι να τον χρησιμοποιήσουμε με ένα πίνακα με δείκτες. Ακολουθεί η βασική σύνταξη:

foreach($array as $value)
{
    // Κάνε εργασίες πάνω στην τιμή
}

Για παράδειγμα, το ακόλουθο κομμάτι κώδικα περνά από όλα τα μουσικά συγκροτήματα σε ένα πίνακα με δείκτες και εκτυπώνει το όνομα του κατά την πρόοδο της προσπέλασης:

$music_groups = array('The Doors', 'Pink Floyd', 'Madrugada', 'Radiohead');

foreach($music_groups as $group)
{
    echo "Music group: " . $group . "<br />;
}

Έτσι όταν εκτελέσουμε τον παραπάνω κώδικα θα πάρουμε το ακόλουθο αποτέλεσμα :

Music group: The Doors
Music group: Pink Floyd
Music group: Madrugada
Music group: Radiohead

Βρόχος ανάμεσα σε δείκτες και τιμές

Ως εδώ όλα καλά, αλλά τι γίνετε με τους συσχετισμένους πίνακες; Σε μια τέτοια περίπτωση πιθανότατα να θέλετε να προσπελάσετε και τους δείκτες το ίδιο όπως και τις τιμές των στοιχείων. Ευτυχώς ο βρόχος foreach σας το επιτρέπει να το κάνετε με μια εύκολη διαδικασία.

foreach($array as $key => $value)
{
    // Κάνε εργασίες πάνω στον δείκτη ή/και στην τιμή
}

Ακολουθεί ένα παράδειγμα με βρόχο πάνω σε ένα συσχετισμένο πίνακα. Το ακόλουθο παράδειγμα θα εκτυπώσει κάθε δείκτη σε συνδυασμό με την τιμή του στοιχείου

$song_info = array(
    "title" => "Cry for love",
    "band" => 'Iggy Pop',
    "duration" => '03:31',
    "type" => 'rock'
);

foreach($song_info as $key => $value)
{
    echo '<strong>' . $key . '</strong> : ' . $value . '<br />';
}

Ο παραπάνω κώδικας θα εκτυπώσει το ακόλουθο αποτέλεσμα :

title : Cry for love
band : Iggy Pop
duration : 03:31
type: rock

Επεξεργασία τιμών μέσα στο βρόχο

Ως εδώ έχετε μάθει να διαβάζεται τις τιμές των στοιχείων ενός πίνακα, αλλά πως μπορείτε να αλλάξετε τις τιμές των στοιχείων του πίνακα ενώ είστε στο βρόχο; Μπορείτε αν θέλετε να δοκιμάσετε κάτι σας αυτό που ακολουθεί:

foreach($array as $value)
{
    $value = 'νέα τιμή';
}

Ωστόσο αν κάνετε το παραπάνω θα δείτε πως οι τιμές στον πίνακα δεν μεταβάλλονται. Αυτό συμβαίνει γιατί ο βρόχος foreach εργάζεται πάνω σε ένα αντίγραφο των στοιχείων του πραγματικού πίνακα, και έτσι ο πραγματικός πίνακας παραμένει ακέραιος.

Για να αλλάξετε τις τιμές του πίνακα θα πρέπει να αναφερθείτε στην τιμή. Μπορείτε το κάνετε αυτό τοποθετώντας ένα (ampersand &) πριν την τιμή μέσα στο βρόχο foreach:

foreach($array as &$value)
{
    $value = 'νέα τιμή';
}

Με αυτό τον τρόπο η μεταβλητή $value αναφέρεται στο αντίστοιχο στοιχείο του πραγματικού πίνακα, που με τη σειρά του αυτό σημαίνει πως μπορείτε να μεταβάλετε την τιμή του στοιχείου στον πραγματικό πίνακα.

Μια αναφορά είναι ένας δείκτης προς την πραγματική τιμή, αντί για ένα αντίγραφο της τιμής. Μπορείτε να το φανταστείτε σαν μια συντόμευση στα Windows ή ένα alias σε σύστημα Mac OS.

Για παράδειγμα, το ακόλουθο κομμάτι κώδικα πραγματοποιεί βρόχο σε ένα πίνακα με τα ονόματα τραγουδιστών. Στη συνέχεια χρησιμοποιεί τις συναρτήσεις explode() και list() της PHP για να αντιστρέψει τη σειρά από το όνομα και το επώνυμο των τραγουδιστών:

$singers = array(
 "Jim Morrison",
 "Roger Waters",
 "Sivert Høyem",
 "Thom Yorke"
);

foreach($singers as &$singer)
{
 list($first_name, $last_name) = explode(" ", $singer");
 $singer = $last_name . ' ' . $first_name;
}

unset($singer);

foreach($singers as $singer)
{
 echo $singer . '<br />'
}

Ο παραπάνω κώδικας θα εκτυπώσει το ακόλουθο αποτέλεσμα:

Morrison Jim
Waters Roger
Høyem Sivert
Yorke Thom

Να σημειωθεί πως στον κώδικα χρησιμοποιήσαμε τη συνάρτηση unset() της PHP, για να διαγράψουμε τη μεταβλητή $singer αφού τη χρησιμοποιήσαμε στον πρώτο βρόχο ως αναφορά. Αυτή γενικότερα είναι μια καλή τακτική, αν νομίζεται πως η μεταβλητή σας μπορεί αργότερα να σας είναι και πάλι χρήσιμη για να αποθηκεύσει μια άλλη τιμή.

Αν δεν διαγράψετε τη μεταβλητή, τότε υπάρχει περίπτωση στον επόμενο βρόχο να αναφέρεστε στο τελευταίο στοιχείο του πίνακα ή να έχετε αποτελέσματα που δεν τα περιμένετε!

Για την περίπτωση που απλός έχετε την απορία, θα πρέπει να σημειωθεί πως με το βρόχο foreach μπορείτε να μεταβάλετε την τιμή ενός στοιχείου σε ένα PHP πίνακα αλλά δεν μπορείτε να μεταβάλετε τον δείκτη

Περίληψη

Σε αυτό το tutorial είδατε πως μπορείτε να να χρησιμοποιήσετε το βρόχο foreach() της PHP, για να προσπελάσετε όλα τα στοιχεία ενός πίνακα. Ποιο συγκεκριμένα είδατε:

  • Πως να κάνετε βρόχο στα στοιχεία ενός πίνακα
  • Πως να προσπελάσετε τους δείκτες και τις τιμές των στοιχείων ενός πίνακα
  • Να χρησιμοποιείτε αναφορές για να μεταβάλετε την τιμή ενός στοιχείου του πίνακα μέσα στο βρόχο

Περισσότερα για τον CorfuGmr

CorfuGmr

Ονομάζομαι Νίκος και ασχολούμαι με το internet και την κατασκευή ιστοσελίδων από το 1998. Σήμερα, μετά από 12 χρόνια γεμάτα με ενημέρωση, εκπαίδευση και εξάσκηση έχω ανεβάσει σε ένα άλλο επίπεδο τις γνώσεις μου και τις τεχνικές μου. Στα άρθρα μου προσπαθώ να σας δείξω τα μικρά, αλλά σημαντικά πράγματα που με έχουν ανεβάσει σε αυτό το επίπεδο.








Σχόλια



24 Οκτωβρίου 2011

Κι έψαχνα ένα καλό παράδειγμα με την foreach.Μπορώ να πω ότι είσαι πιο κατατοπιστικός στην συγκεκριμένη εντολή απο το official php.νετ manual + ότι είναι στα ελληνικά.

Bookmarked το άρθρο.


Συγνώμη, τα σχόλια για αυτό το άρθρο είναι κλειστά.



^
Top
css.php