Τα arrays ή αλλιώς πίνακες είναι μια συλλογή δεδομένων του ιδίου τύπου. Συγκεκριμένα, οι πίνακες είναι κάτι σαν μεταβλητές που χωράνε περισσότερες από μια τιμές σε αντίθεση με τις κανονικές μεταβλητές που αποθηκεύουν μόνο μια τιμή.
Οι τιμές που αποθηκεύονται στους πίνακες είναι του ιδίου τύπου. Συγκεκριμένα θα είναι integer ή string ή float κλπ. Στο εφεξής τους πίνακες θα τους αποκαλούμε arrays.
Τα arrays φανταστείτε ότι είναι πολλές μεταβλητές σε μία, στην οποία όλες οι τιμές είναι μαζί σε μια σειρά. Όπως στις μεταβλητές, έτσι και στα arrays δίνουμε ονομασίες, για παράδειγμα θα ονομάσουμε το array μας ως $age
όπως θα δείτε παρακάτω.
Γενικά τα arrays είναι πολύ λειτουργικά και χρήσιμα γιατί από τη μια μας λύνουν τα χέρια από τη μαζική αρχικοποίηση μεταβλητών, ενώ από την άλλη μας προσφέρουν επιπλέον δυναμικότητα ως προς τη μαζική διαχείριση τιμών (δεδομένων). Δεν θα σας κουράσω με θεωρίες αλλά πάμε να δούμε στην πράξη τί ακριβώς είναι αυτά τα arrays. Ένα array στην PHP το ορίζουμε έτσι,
$age = array();
Η $age
είναι το όνομα του array
μας. Θα μπορούσαμε να δώσουμε ένα οποιοδήποτε όνομα της προτίμησής μας. Οι θέσεις των array
ξεκινάνε πάντα από το 0
. Οι αριθμοί αυτοί χρησιμοποιούνται ως αναφορά στην τιμή της κάθε θέσης του array
μας. Παρακάτω βλέπουμε πώς δηλώνουμε τιμές σε ένα array
:
1. $age[0] = 25;
2. $age[1] = 33;
3. $age[2] = 76;
4. $age[3] = 84;
5. $age[4] = 95;
Για την καλύτερη κατανόηση του παραπάνω κώδικα, ακολουθεί ένα παράδειγμα για το πώς γίνεται η αντιστοιχία θέσεων της μνήμης με τις τιμές του array στον παρακάτω πίνακα.
Θέσεις | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
Τιμές | 25 | 33 | 76 | 84 | 95 |
Σύμφωνα με το παραπάνω κώδικα έχουμε:
Γραμμή 1: Θέτουμε την τιμή 25 στη θέση 0 της $age
.
Γραμμή 2: Θέτουμε την τιμή 33 στην θέση 1 της $age
.
Γραμμή 3: κοκ
Όπως βλέπετε, με μια μόνο ονομασία ενός array
και συγκεκριμένα $age
, μπορούμε να δηλώσουμε πολλαπλές τιμές. Θα δούμε παρακάτω με παραδείγματα για ποιο λόγο μπορούμε να επεξεργαζόμαστε πολλαπλές τιμές των arrays.
Στο παραπάνω παράδειγμα, είδαμε πώς θέτουμε τιμές σε ένα array
. Τώρα θα δούμε πώς μπορούμε να λαμβάνουμε μια τιμή θέσης του array μας. Ο τρόπος είναι ακριβώς ο ίδιος όπως και με τις μεταβλητές, με τη μόνη διαφορά ότι στα arrays δηλώνουμε και τη θέση της τιμής που θέλουμε να λάβουμε. Για παράδειγμα, εάν θέλω να εμφανίσω το περιεχόμενο της $age
στη θέση 2
, τότε γράφω:
Όνομα αρχείου: arrays.php
1. $age = array();
2. $age[0] = 25;
3. $age[1] = 33;
4. $age[2] = 76;
5. $age[3] = 84;
6. echo $age[1];
Αποτέλεσμα:
33
Σημείωση: Στο παραπάνω παράδειγμα είδαμε ότι για να εμφανίσω τη τιμή της θέσης 2
του array
μου έγραψα στη γραμμή 6 $age[1]
. Αυτό συμβαίνει γιατί στα arrays οι θέσεις ξεκινούν από το 0
. Συνεπώς εάν θέλω να εμφανίσω τη τιμή της θέσης 1
, θα γράψω $age[0]
.
Πήρατε μια γρήγορη γεύση από τα arrays. Πάμε να δούμε τώρα για ποιόν λόγο τα χρειαζόμαστε. Έστω ότι για κάποιο λόγο έπρεπε να καταχωρήσετε 100 τιμές στο πρόγραμμά σας. Σε αυτή τη περίπτωση εάν δεν υπήρχαν τα arrays τι θα έπρεπε να κάνετε; Μα φυσικά να δημιουργήσετε 100 μεταβλητές. Το φαντάζεστε; Μόνο για να διαχειριστείτε 100 τιμές να πρέπει να ξοδέψετε 100 γραμμές κώδικα. Και εντάξει, 100 γραμμές λες γίνεται, τί κάνουμε αν χρειαζόμασταν 500, 1000 ή 5000; Θα δηλώνατε 1000 μεταβλητές; Για να δούμε στη πράξη τι εννοούμε. Χάριν ευκολίας θα δημιουργήσουμε ένα πρόγραμμα που χρειάζεται καταχώρηση 5 τιμών.
Όνομα αρχείου: temp_calc.php
1. // Average temperature calculation
2. // without using arrays.
3. $temp1 = 25;
4. $temp2 = 26;
5. $temp3 = 28;
6. $temp4 = 30;
7. $temp5 = 33;
8. $sum = $temp1 + $temp2 + $temp3 + $temp4 + $temp5;
9. $average = $sum / 5;
10. echo "Average temperature: " . $average;
Αποτέλεσμα:
Average temperature: 28.4
Στο παραπάνω πρόγραμμα θέτουμε 5 μεταβλητές $temp1
εως $temp5
και δηλώνουμε τις αντίστοιχες θερμοκρασίες σε κάθε μεταβλητή. Στη συνέχεια τις προσθέτουμε, υπολογίζουμε και εμφανίζουμε τον μέσο όρο της θερμοκρασίας στην οθόνη του Η/Υ.
Πάμε να δούμε το ίδιο πρόγραμμα με το παραπάνω, αλλά χρησιμοποιώντας arrays αυτή τη φορά:
Όνομα αρχείου: temp_calc_arr.php
1. // Average temperature calculation
2. // using arrays.
3. $temp = array();
4. $temp[0] = 25;
5. $temp[1] = 26;
6. $temp[2] = 28;
7. $temp[3] = 30;
8. $temp[4] = 33;
9.
10. $sum = 0;
11. for($k = 0; $k < count($temp); $k++) {
12. $sum = $sum + $temp[$k];
13. }
14.
15. $average = $sum / 5;
16. echo "Average temperature: " . $average;
Αποτέλεσμα:
Average temperature: 28.4
Το παραπάνω παράδειγμα χρησιμοποιεί arrays για να υπολογίσει τον μέσο όρο της θερμοκρασίας. Όπως παρατηρείτε στις γραμμές 11 έως 13 ο βρόχος επαναλήψεως for
υπολογίζει το άθροισμα των τιμών χωρίς να χρειαστεί να προσθέσουμε κάποια μεταβλητή χειροκίνητα στο πρόγραμμά μας.
Γραμμή 3: Δημιουργία του array με όνομα $temp
.
Γραμμή 4-8: Αρχικοποίηση του array $temp
με τις αντίστοιχες τιμές.
Γραμμή 11: Για να υπολογίσουμε το άθροισμα όλων των θερμοκρασιών χρησιμοποιούμε μια for
. Με τα arrays έχουμε τη δυνατότητα να τα επεξεργαζόμαστε χρησιμοποιώντας βρόχους επαναλήψεως. Στην περίπτωση με το παράδειγμα χωρίς arrays, έπρεπε χειροκίνητα να γράψουμε μια προς μια τις μεταβλητές που θέλουμε να προσθέσουμε. Ενώ χρησιμοποιώντας arrays, μπορούμε με μια for να υπολογίσουμε όσες τιμές επιθυμούμε χωρίς να χρειαστεί να πληκτρολογήσουμε κάτι επιπλέον. Η εντολή count()
επιστρέφει το μέγεθος του array
μας. Συνεπώς με την count()
γνωρίζουμε ανά πάσα στιγμή πόσες φορές θα εκτελεστεί ο βρόχος της for
για να επεξεργαστούμε όλες τις τιμές του array
μας.
Γραμμή 15: Υπολογισμός του μέσου όρου της θερμοκρασίας και αποθήκευση του αποτελέσματος στην μεταβλητή $average
.
Γραμμή 16: Εμφάνιση του μηνύματος με το μέσο όρο της θερμοκρασίας.
Βέβαια το προηγούμενο παράδειγμα μπορούμε να το εξελίξουμε ακόμα περισσότερο γράφοντας μικρότερο και εξυπνότερο κώδικα.
Όνομα αρχείου: temp_calc_final.php
1. // Average Temperature Calculation
2. // Final code
3. $temp = array(25, 26, 28, 30, 33);
4.
5. $sum = 0;
6. $temp_len = count($temp);
7.
8. for($i=0; $i <= $temp_len-1; $i++) {
9. $sum = $sum + $temp[$i];
10. }
11.
12. $average = $sum / $temp_len;
13.
14. echo "Average: " . $average;
Αποτέλεσμα:
Average: 28.4
Γραμμή 3: Για συντομία μπορούμε να αρχικοποιήσουμε ένα array
και με αυτό τον τρόπο. Για παράδειγμα η τιμή 25
βρίσκεται στη θέση 0
του array
. Η τιμή 26
βρίσκεται στη θέση 1
του array
κοκ.
Γραμμή 5: Αρχικοποιούμε τη μεταβλητή $sum=0
. Εάν δεν αρχικοποιούσαμε τη $sum
, στη συνέχεια στη γραμμή 9 που χρησιμοποιούμε τη $sum
θα είχαμε πρόβλημα με errors.
Γραμμή 6: Θα πρέπει ανά πάσα στιγμή να γνωρίζουμε το μέγεθος του array
. Όσο είναι το μέγεθος του array
, τόσο είναι και το πλήθος των τιμών που θα υπολογίσουμε. Έτσι, χρησιμοποιώντας την count()
στο array $temp
δηλ. count($temp)
, η PHP μας επιστρέφει το μέγεθος του array
ανά πάσα στιγμή και η τιμή αποθηκεύεται στη μεταβλητή $temp_len
.
Γραμμή 8: Η for
αν παρατηρήσετε έχει μια δυναμικότητα. Προσαρμόζεται ανάλογα με το σύνολο των τιμών του array
μας. Αυτό επιτυγχάνεται στο σημείο που θέτουμε το εύρος των επαναλήψεων $temp_len
δηλαδή από 0
έως όσο είναι το μέγεθος του array
. Η $temp_len
περιέχει το μέγεθος του array
που στη συγκεκριμένη περίπτωση είναι 5
. Αλλά επειδή όπως είπαμε οι θέσεις του array ξεκινάνε από το 0
, πρέπει να αφαιρέσουμε 1
ώστε από 5
να γίνει 4
το όριο της for
. Δηλαδή θα μετρήσει 0,1,2,3,4 που ουσιαστικά είναι 5 τιμές. Εάν αφήναμε την $temp_len
να μετρήσει μέχρι το 5
που είχε προσδιοριστεί, τότε θα μετρούσε τις τιμές 0,1,2,3,4,5. Επειδή η 6η θέση στο array
μας δεν υπάρχει, τότε θα λαμβάναμε από τη PHP ένα ωραιότατο error.
Γραμμή 9: Προσθέτουμε όλες τις τιμές του array μας $temp
.
Γραμμή 12: Υπολογίζουμε τη μέση θερμοκρασία διαιρώντας το άθροισμα των τιμών του array
με το σύνολο των τιμών του (στη συγκεκριμένη περίπτωση 5).
Γραμμή 14: Εμφανίζεται το μήνυμα με το αποτέλεσμα του μέσου όρου της θερμοκρασίας.
Το παραπάνω παράδειγμα temp_calc_final.php
είναι πιο έξυπνο και πιο ευέλικτο γιατί απλά προσθέτοντας τιμές στο array
της γραμμής 3, αυτόματα προσαρμόζεται το πρόγραμμα και χωρίς καμία αλλαγή στον κώδικα, εμφανίζεται το αποτέλεσμα στην οθόνη. Κάτι τέτοιο στο παράδειγμα temp_calc_arr.php
δεν θα μπορούσε να πραγματοποιηθεί. Και αυτό γιατί θα έπρεπε να κάνουμε τις εξής μεταβολές:
- Να προσθέσουμε μια
$temp[]
στην γραμμή 9, π.χ.$temp[5] = 34;
- Στην γραμμή 11 στη
for
από 4 να το κάνουμε 5 γιατί προστέθηκε η επιπλέον$temp[5]
και συνεπώς από 5 που ήταν οι τιμές τώρα έγιναν 6. Υπενθυμίζω ότι οι θέσεις τωνarray
ξεκινάνε να μετράνε από 0. - Στην γραμμή 15 από
$average = $sum / 5;
θα έπρεπε να γίνει$average = $sum / 6;
. Συγκεκριμένα για να βρούμε το μέσο όρο πρέπει να διαιρέσουμε το άθροισμα των τιμών με τις τιμές στο σύνολό τους. Στη συγκεκριμένη περίπτωση έχουμε 6 τιμές.
Ενώ στο παράδειγμα temp_calc_final.php
τοποθετώντας απλά αριθμούς στην γραμμή 3, το πρόγραμμα προσαρμόζεται και εμφανίζει το σωστό αποτέλεσμα.
Με αυτό το παράδειγμα, δόθηκε έμφαση στο πόσο σημαντικό είναι να γράφουμε ευέλικτο κώδικα. Το συγκεκριμένο παράδειγμα είναι μικρό και δεν είναι εμφανής η σημαντικότητα αυτής της τεχνικής. Όταν με το καλό θα γράφετε χιλιάδες γραμμές κώδικα, θα είναι πολύ σημαντικό με την ελάχιστη παρέμβασή σας να προσαρμόζεται ο κώδικάς σας στις πιθανές αλλαγές που θα πραγματοποιείτε.
Στο παρακάτω παράδειγμα θα δείτε τον κώδικα ο οποίος εντοπίζει τον μεγαλύτερο αριθμό μεταξύ άλλων.
Όνομα αρχείου: find_the_max.php
1. // initiate array and loop values
2. $arr = array(34, 54, 12, 78, 54, 11);
3. $index = 0;
4. $max = 0;
5.
6. // loop over each element in arr
7. while ($index < count($arr)) {
8. if($arr[$index] > $max) {
9. //update max
10. $max = $arr[$index];
11. }
12. $index = $index + 1;
13. }
14.
15. //output calculated max
16. echo "max number is: " . $max;
Αποτέλεσμα:
max number is: 78
Γραμμή 2: Αρχικοποίηση του array μας με τις τιμές που φαίνονται.
Γραμμή 3-4: Αρχικοποίηση των μεταβλητών $index
και $max
οι οποίες θα ισούνται με 0
. Η $index θα λειτουργεί ως ευρετήριο του array
μας, ενώ η $max
θα περιέχει την μεγαλύτερη τιμή που θα εντοπίζει το πρόγραμμά μας από τα περιεχόμενα της $arr
.
Γραμμή 7: Δημιουργία ενός while
βρόχου επαναλήψεως, ο οποίος θα εκτελείται όσο η $index
είναι μικρότερη από μέγεθος του array
μας. Υπενθυμίζουμε ότι η $arr
είναι το array
που δηλώσαμε στη γραμμή 2. Με την count($arr)
η PHP υπολογίζει το μέγεθος της $arr
και συγκεκριμένα το πλήθος των τιμών που περιέχει. Η $arr
περιέχει 6 τιμές συνολικά. Επομένως η count($arr)
θα επιστρέψει 5
. Δεν θα επιστρέψει 6
γιατί όπως είδαμε προηγουμένως για τα Arrays, ξεκινάμε πάντα να μετράμε από το 0 και όχι από το 1. Όπως ήδη έχουμε αναφερθεί στο κεφάλαιο των βρόχων επαναλήψεων, ο κώδικας που θα επαναλαμβάνεται ξεκινά από τη γραμμή 7 έως την }
του while
που φτάνει έως τη γραμμή 13.
Γραμμή 8: Έλεγχος εάν το περιεχόμενα της $arr
είναι μεγαλύτερο από την τιμή της μεταβλητής $max
.
Γραμμή 10: Εάν όντως η τιμή της $arr
είναι μεγαλύτερη από τη $max
, τότε στην μεταβλητή $max
θα αποθηκεύεται η τιμή της $arr
.
Γραμμή 12: Αυξάνεται η τιμή της μεταβλητής $index
κατά μια μονάδα. Ο λόγος που αυξάνεται κατά μία μονάδα, είναι γιατί θα χρησιμοποιηθεί ώστε να προσδιορίσει την θέση της επόμενης θέσης του array
μας. Υπενθυμίζουμε ότι κάθε θέση του array
περιέχει και μια τιμή. Έτσι, η $index χρησιμοποιείται ως δείκτης ο οποίος προσδιορίζει την θέση της τιμής που θα λάβουμε από το array
μας.
Γραμμή 16: Εμφανίζουμε το αποτέλεσμα του μεγαλύτερου αριθμού μεταξύ των τιμών του array
μας.
Ο βρόχος foreach στην PHP χρησιμοποιείται για την επανάληψη πάνω από τα στοιχεία ενός πίνακα ή άλλων επαναλαμβανόμενων δομών δεδομένων (όπως αντικείμενα που υλοποιούν τη διεπαφή Transable). Σας επιτρέπει να έχετε πρόσβαση σε κάθε στοιχείο του πίνακα ένα κάθε φορά και να εκτελέσετε κάποια λειτουργία σε αυτό.
Ακολουθεί η βασική σύνταξη ενός βρόχου foreach:
foreach ($array as $value)
{
// Code to be executed for each element
}
Δείτε πώς λειτουργεί ο βρόχος foreach:
- Παρέχετε έναν πίνακα ή μια επαναλαμβανόμενη δομή δεδομένων στην οποία θέλετε να πραγματοποιήσετε αναζήτηση.
- Η foreach προχωρά αυτόματα στο επόμενο στοιχείο του πίνακα σε κάθε επανάληψη.
- Σε κάθε επανάληψη, το τρέχον στοιχείο εκχωρείται σε μια μεταβλητή που καθορίζετε. Αυτή η μεταβλητή μπορεί να είναι οποιοδήποτε έγκυρο όνομα μεταβλητής PHP.
Μπορείτε επίσης να πάρετε και το key του array και να το επεξεργαστείτε στην foreach:
foreach ($array as $key => $value)
{
// Code to be executed for each element
}
Δείτε τι κάνει συνοπτικά το foreach:
- Επαναλαμβάνεται μέσω κάθε στοιχείου του πίνακα ή του επαναληπτικού.
- Εκχωρεί το τρέχον στοιχείο σε μια μεταβλητή (και προαιρετικά το κλειδί σε μια άλλη μεταβλητή).
- Εκτελεί το μπλοκ κώδικα εντός του βρόχου για κάθε στοιχείο.
Ο βρόχος foreach χρησιμοποιείται συνήθως για επανάληψη σε πίνακες, λίστες και συλλογές όταν θέλετε να επεξεργαστείτε κάθε στοιχείο της συλλογής ένα προς ένα χωρίς τη μη αυτόματη διαχείριση μετρητών ή δεικτών βρόχων. Είναι ένας βολικός και ευανάγνωστος τρόπος εργασίας με επαναλαμβανόμενες δομές δεδομένων στην PHP.
Σε αυτό το παράδειγμα, ο βρόχος foreach χρησιμοποιείται για επανάληψη μέσω του πίνακα $fruits και για κάθε επανάληψη, το τρέχον στοιχείο του πίνακα (ένα όνομα φρούτου) εκχωρείται στη μεταβλητή $fruit. Στη συνέχεια, ο βρόχος τυπώνει ένα μήνυμα που εκφράζει την αγάπη για κάθε φρούτο στη σειρά.
<?php
// Define an array of fruits
$fruits = ["apple", "banana", "cherry", "date", "grape", "kiwi", "lemon", "mango", "orange", "pear"];
// Use a foreach loop to iterate through the array
foreach ($fruits as $fruit)
{
echo "I love $fruit!\n";
}
Όνομα αρχείου: array2table.php
<html>
<body>
<?php
$rows = array(
0 => array(
'name' => 'Bill',
'email' => 'bill@microsoft.com'
),
1 => array(
'name' => 'Steve',
'email' => 'steve@apple.com'
),
2 => array(
'name' => 'Linus',
'email' => 'linus@linux.com'
)
);
echo "<table border=1>
<tr><td>
Name
</td>
<td>
Email
</td>
</tr>";
foreach ($rows as $row)
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Αποτέλεσμα:
Η count() επιστρέφει το μέγεθος ενός array.
Παράδειγμα:
<?php
$stuff[0] = 4;
$stuff[1] = 3;
$stuff[2] = 2;
echo count($stuff); // 3
?>
Αποτέλεσμα:
3
Η rsort ταξινομεί ένα array αντίστροφα. Το r είναι για reverse.
Παράδειγμα:
<?php
$veggies = ["Spinach", "Corn", "Carrots", "Tomatoes", "Cucumbers"];
rsort($veggies);
print_r($veggies);
?>
Αποτέλεσμα:
Array
(
[0] => Tomatoes
[1] => Spinach
[2] => Cucumbers
[3] => Corn
[4] => Carrots
)
Η sort ταξινομεί ένα array.
Παράδειγμα:
<?php
$veggies = ["Spinach", "Corn", "Carrots", "Tomatoes", "Cucumbers"];
sort($veggies);
print_r($veggies);
?>
Αποτέλεσμα:
Array
(
[0] => Carrots
[1] => Corn
[2] => Cucumbers
[3] => Spinach
[4] => Tomatoes
)
Παράδειγμα:
Αποτέλεσμα:
Αναζητεί ένα στοιχείο αν ανήκει στο array μας.
Παράδειγμα:
<?php
$veggies = ["Spinach", "Corn", "Carrots", "Tomatoes"];
if (in_array("Tomatoes", $veggies)) {
echo "The best Tomatoes make the best Red Sauce!<br>";
}
if (in_array("Snickers Bar", $veggies)) {
echo "Eating a Snickers is Great.";
}
Αποτέλεσμα:
The best Tomatoes make the best Red Sauce!
Παράδειγμα:
Αποτέλεσμα:
Παράδειγμα:
Αποτέλεσμα:
Ελέγχει εαν η μεταβλητή είναι array.
Παράδειγμα:
<?php
$dynamic = [
'number' => 7,
'live' => 'House',
'drive' => 'Car',
[
'mow' => 'grass',
[
'tractor' => 'John Deere',
'tractor2' => 'Kubota',
'tractor3' => 'New Holland'
],
'landscape' => 'mulch'
]
];
$one = is_array($dynamic);
$two = is_array($dynamic['number']);
$three = is_array($dynamic[0]);
echo $one ? 'The $dynamic variable is an array<br>' : 'The $dynamic variable is not an array<br>';
echo $two ? 'The "number" key of the $dynamic variable is an array<br>' : 'The "number" key of the $dynamic variable is not an array<br>';
echo $three ? 'The 0 index of the $dynamic variable is an array<br>' : 'The 0 index of the $dynamic variable is not an array<br>';
?>
Αποτέλεσμα:
The $dynamic variable is an array
The “number” key of the $dynamic variable is not an array
The 0 index of the $dynamic variable is an array
Εισάγει νέο στοιχείο στον πίνακα.
Παράδειγμα:
<?php
$array = [
'Apples',
'Blueberries',
'Pumpkins',
'Corn',
];
array_push($array, 'Watermelons');
echo '<pre>';
print_r($array);
?>
Αποτέλεσμα:
Array
(
[0] => Apples
[1] => Blueberries
[2] => Pumpkins
[3] => Corn
[4] => Watermelons
)
Παράδειγμα:
Αποτέλεσμα:
Παράδειγμα:
Αποτέλεσμα:
Παράδειγμα:
Αποτέλεσμα:
Παράδειγμα:
Αποτέλεσμα:
Παράδειγμα:
Αποτέλεσμα: