Βρόχοι (Loops)

Πολλές φορές θέλουμε να εκτελέσουμε το ίδιο κομμάτι κώδικα παραπάνω από μία φορά. Ή, όπως είδαμε στην προηγούμενη ενότητα, οι πίνακες είναι χρήσιμοι γιατί μπορούμε να ομαδοποιήσουμε πολλαπλές τιμές σε μία και μόνο μεταβλητή. Η μορφή ενός πίνακα μάς βοηθάει να διατρέξουμε τα στοιχεία του γρήγορα και εύκολα. Όλα τα προηγούμενα πραγματοποιούνται με τη βοήθεια βρόχων. Υπάρχουν οι εξής βρόχοι στην PHP:

  • while (συνθήκη): διατρέχει ένα κομμάτι κώδικα όσο η συνθήκη είναι αληθής
  • do... while (συνθήκη): διατρέχει ένα κομμάτι κώδικα μια φορά και εφόσον η συνθήκη είναι αληθής, το διατρέχει και άλλες φορές
  • for: διατρέχει ένα κομμάτι κώδικα για συγκεκριμένο αριθμό επαναλήψεων
  • foreach: εκτελεί ένα συγκεκριμένο κομμάτι κώδικα για κάθε στοιχείο ενός πίνακα


Ο βρόχος while
Ο βρόχος while εκτελεί ένα συγκεκριμένο κομμάτι όσο η συνθήκη είναι αληθής.

while (συνθήκη)
{
    // εκτέλεση κώδικα
} // end while

Για παράδειγμα:

<?php
    $x = 1;
    while ( $x <= 5 )
    {
        echo "Το x είναι ίσο με ".$x."<br />";
        $x++;
    } // end while
?>

Το παραπάνω while τυπώνει το $x όσο η τιμή του είναι μικρότερη ή ίση του 5 και κάθε φορά την αυξάνει κάτα μία μονάδα. Αν ΔΕΝ αυξάναμε την τιμή του, θα ήταν μονίμως 1, οπότε ο κώδικας δε θα τερμάτιζε ποτέ (ατέρμων βρόχος ή loop), οπότε καλό είναι να είμαστε προσεκτικοί με τη χρήση των loops.


Ο βρόχος do... while
Είναι όμοιος με το βρόχο while με τη διαφορά ότι ο κώδικας που περιλαμβάνεται μέσα στο βρόχο θ εκτελεστεί οπωσδήποτε μια φορά. Αν η συνθήκη είναι αληθής, θα συνεχίσει να εκτελείται ο κώδικας.

do {
    // εκτέλεση κώδικα τουλάχιστον μια φορά
} while (συνθήκη)

Για παράδειγμα:

<?php
    $x = 1;
    do
    {
        $x++;
        echo "Το x είναι ίσο με ".$x."<br />";
    } while ( $x <= 5 )
?>

Ο παραπάνω κώδικας αυξάνει κάτα μία μονάδα την τιμή του $x και στη συνέχεια την εκτυπώνει. Στο τέλος γίνεται έλεγχος αν το x είναι μικρότερο ή ίσο του 5. Αν ναι, τότε ο κώδικα εκτελείται πάλι. Το αποτέλεσμά του θα είναι:

Το x είναι ίσο με 2
Το x είναι ίσο με 3
Το x είναι ίσο με 4
Το x είναι ίσο με 5
Το x είναι ίσο με 6


Ο βρόχος for
Η εντολή for χρησιμοποιείται για την εκτέλεση ενός κομματιού κώδικα σε συγκεκριμένο αριθμό επαναλήψεων. Η σύνταξή της έχει την εξής μορφή:

for (αρχικοποίηση; συνθήκη; αλλαγή τιμής)
{
    // εκτέλεση κώδικα
} // end for

Στην αρχικοποίηση συνήθως θέτουμε μία τιμή σε μία μεταβλητή (αρχικοποιούμε δηλαδή τη μεταβλητή). Η συνθήκη χρησιμοποιείται για να ελέγχουμε αν έχουμε τελειώσει τον αριθμό επαναλήψεων του κώδικα. Στην αλλαγή τιμής συνήθως αλλάζουμε (είτε με αύξηση είτε με μείωση) την τιμή της μεταβλητής που αρχικοποίησαμε αρχικά. Το κομμάτι αυτό εκτελείται στο τέλος κάθε επανάληψης.

Για παράδειγμα:

<?php
    for ( $x = 1; $x <= 5; $x++ )
    {
        echo "Ο αριθμός x είναι ίσος με ".$x.". <br />";
    } // end for
?>

Σύμφωνα με τα παραπάνω, το πρώτο κομμάτι κώδικα που εκτελείται είναι η πρώτη παράμετρος της for, δηλαδή το $x = 1. Στη συνέχεια και εφόσον το x είναι μικρότερο ή ίσο του 5 (συνθήκη $x <= 5), τυπώνουμε στην οθόνη την τιμή του x. Στο τέλος κάθε επανάληψης εκτελείται ο κώδικας της τρίτης παραμέτρου ($x++), δηλαδή αυξάνεται το $x κατά μία μονάδα. Το αποτέλεσμα του κώδικα είναι το εξής:

Ο αριθμός x είναι ίσος με 1. 
Ο αριθμός x είναι ίσος με 2. 
Ο αριθμός x είναι ίσος με 3. 
Ο αριθμός x είναι ίσος με 4. 
Ο αριθμός x είναι ίσος με 5. 

Αν βάζαμε στην τρίτη παράμετρο τον κώδικα “$x = $x + 2”, το x θα αυξανόταν κατά δύο μονάδες σε κάθε επανάληψη και το αποτέλεσμα θα ήταν:

Ο αριθμός x είναι ίσος με 1. 
Ο αριθμός x είναι ίσος με 3. 
Ο αριθμός x είναι ίσος με 5.


Ο βρόχος foreach
Ο βρόχος foreach χρησιμοποιείται για να διατρέξουμε τα στοιχεία ενός πίνακα. Μπορεί να γραφεί με δύο τρόπους:

foreach ( $array as $index => $value )
{
    // εκτέλεση κώδικα
} // end foreach

ή

foreach ( $array as $value )
{
    // εκτέλεση κώδικα
} // end foreach


Στην πρώτη περίπτωση αποθηκεύουμε την τιμή του δείκτη στη μεταβλητή $index ενώ στη δεύτερη κρατάμε μόνο την τιμή του κάθε δείκτη. Για παράδειγμα:

<?php
    $students = array ( "Σπύρος", "Μαρία", "Νίκος" );
    foreach ( $students as $value )
    {
        echo $value.'<br />';
    } // end foreach
?>

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

<?php
    $students = array ( "Σπύρος", "Μαρία", "Νίκος" );
    foreach ( $students as $index => $value )
    {
        echo $index.': '.$value.'<br />';
    } // end foreach
?>

Ο παραπάνω κώδικας θα τυπώσει τα ζεύγη δεικτών και τιμών:
0: Σπύρος
1: Μαρία
2: Νίκος