Ένας πίνακας είναι ένα σύνολο από στοιχεία διαφόρων τύπων δεδομένων οργανωμένα και ταξινομημένα με βάση κάποιο κλειδί – συντεταγμένη.

Φανταστείτε έναν πίνακα ως ένα λεωφορείο, κάθε θέση μέσα στο λεωφορείο έχει έναν ξεχωριστό αριθμό που μπορεί να φιλοξενήσει έναν επιβάτη. Δεν χρειάζεται όμως οπωσδήποτε αυτό που θα φιλοξενήσει να είναι επιβάτης, μπορεί ακόμη να είναι τα ψώνια του επιβάτη, ένα σακίδιο, ή οτιδήποτε άλλο μπορεί να τοποθετηθεί πάνω σε μια τέτοια θέση. Όπως είναι λογικό, ένας επιβάτης που αρχικά έκατσε στην θέση 30 του λεωφορείου μπορεί για οποιοδήποτε λόγο να σηκωθεί και να αλλάξει θέση πηγαίνοντας σε οποιαδήποτε άλλη βρει κενή.

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

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

Αν θέλαμε να χρησιμοποιήσουμε απλές μεταβλητές για να αντιπροσωπεύσουμε τα ονόματα φοιτητών ενός ΤΕΙ, τότε θα έπρεπε να χρησιμοποιήσουμε μία ξεχωριστή μεταβλητή για κάθε περίπτωση:

<?php
 $spoudastes1 = "Κωνσταντίνος";
 $spoudastes2 = "Δημήτρης";
 $spoudastes3 = "Αντώνης";
 $spoudastes4 = "Γιάννης";
?>

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

Μια μεταβλητή είναι μια θέση στην μνήμη με όνομα στην οποία αποθηκεύεται προσωρινά μια τιμή. Ο πίνακας είναι μια θέση με όνομα στην μνήμη που αποθηκεύονται ένα σύνολο από τιμές. Έτσι μπορούμε να ομαδοποιήσουμε αυτές τις «αναφορές» των μεταβλητών στην μνήμη χρησιμοποιώντας μια «αναφορά» με κλειδιά , δηλαδή έναν πίνακα.

Το κλειδί ενός πίνακα, είναι αυτό που καθορίζει ποια τιμή χρησιμοποιούμε εκείνη την στιγμή. Με βάση το παραπάνω παράδειγμα θα μπορούσαμε να ορίσουμε ότι η μεταβλητή «$spoudastes1» έχει κλειδί «1» η μεταβλητή «$spoudastes2» έχει κλειδί «2» κτλ. Αυτό μας βοηθά να προσπελαύνουμε τις μεταβλητές αυτές με εύκολο τρόπο μέσω βρόγχων.

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

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

Πρακτικά η php χρησιμοποιεί όλους τους πίνακες ως πίνακες με αλφαριθμητικά κλειδιά, η μόνη διαφορά με τα αριθμητικά είναι το διαφορετικό είδος τύπου δεδομένων. Μερικοί πίνακες παρέχονται για αποκλειστική χρήση αριθμημένης διάταξης έτσι ώστε να υπάρχει μια διαδοχική συνοχή στην σειρά των στοιχειών που προσπελαύνουμε, ξεκινώντας πάντα από το μηδέν. Σε κάθε περίπτωση (αριθμημένων και μη) ένας πίνακας δεν μπορεί να διαθέτει δυο ίδια κλειδιά.

Η σειρά με την οποία εισάγονται τα στοιχεία σε έναν πίνακα, είναι και αυτή η οποία καθορίζει την σειρά των στοιχείων στον πίνακα.

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

<?php
 echo $pinakas[0]; //Ο πίνακας δεν υπάρχει ακόμη
 $pinakas[0] = 2014;
?>

Δημιουργία αριθμημένου πίνακα

Για να δημιουργήσουμε έναν αριθμημένο πίνακα τότε θα πρέπει με την σειρά να εισάγουμε στοιχεία σε κάθε θέση του που επιθυμούμε. Χρησιμοποιούμε πάντα την ίδια αναφορά-όνομα όταν θέλουμε να χρησιμοποιήσουμε τον συγκεκριμένο πίνακα, και πάντοτε όταν εισάγουμε στοιχεία προσέχουμε το εκάστοτε κλειδί:

<?php
 $spoudastes[0] = "Κωνσταντίνος";
 $spoudastes[1] = "Δημήτρης";
 $spoudastes[2] = "Αντώνης";
 $spoudastes[3] = "Γιάννης";
?>

Εναλλακτικά χρησιμοποιώντας την μέθοδο array() η οποία δημιουργεί έναν πίνακα με βάση τα ορίσματα που θα της εισάγουμε. Αυτός ο τρόπος δημιουργεί κλειδιά ξεκινώντας με πρώτο κλειδί το «0».

<?php
 $spoudastes = array("Κωνσταντίνος","Δημήτρης","Αντώνης","Γιάννης");
?>

Δημιουργία μη αριθμημένου πίνακα

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

<?php
 $spoudastes['Πρόεδρος'] = "Κωνσταντίνος";
 $spoudastes['Αντιπρόεδρος'] = "Δημήτρης";
 $spoudastes['Γραμματέας']= "Αντώνης";
?>

Εναλλακτικά χρησιμοποιώντας την μέθοδο array() μόνο που στην συγκεκριμένη περίπτωση χωρίζουμε τα κλειδιά με τις τιμές με ένα σύμβολο «=>» π.χ.

<?php
 $spoudastes = array(
   'Πρόεδρος' => "Κωνσταντίνος",
   'Αντιπρόεδρος' => "Δημήτρης",
   'Γραμματέας' => "Αντώνης"
 );
?>

Κενός πίνακας

Για να δημιουργήσουμε ένα κενό πίνακα αρκεί να χρησιμοποιήσουμε την μέθοδο array() χωρίς ορίσματα.

<?php
 $kenos = array();
?>

Αυτόματα κλειδιά

Μπορούμε να δημιουργήσουμε αυτόματα κλειδιά με το σύμβολο «=>» και μια σειρά από τιμές χωρισμένες με κόμμα:

<?php
 $imeres = array(1=>"ΔΕΥ","ΤΡΙ","ΤΕΤ","ΠΕΜ","ΠΑΡ","ΣΑΒ","ΚΥΡ");
?>

Στο παραπάνω παράδειγμα το κλειδί είναι 1 για το «ΔΕΥ», το κλειδί 2 για το «ΤΡΙ» … το κλειδί 7 για το «>ΚΥΡ».

Αν χρησιμοποιήσουμε ως αρχικό κλειδί ένα αλφαριθμητικό τότε οι υπόλοιπες τιμές παίρνουν αριθμημένα κλειδιά ξεκινώντας 0.

<?php
 $imeres = array('Αρχηγός'=>"Κωνσταντίνος","Δημήτρης","Αντώνης");
?>
Το οποίο μας δίνει ως αποτέλεσμα:
Κλειδί Τιμή
Αρχηγός Κωνσταντίνος
0 Δημήτρης
1 Αντώνης

Εύρος τιμών – range()

Η εντολή «range()» δημιουργεί έναν νέο πίνακα στηριγμένο σε ένα εύρος τιμών. Π.χ. μπορούμε να ορίσουμε ότι θέλουμε να δημιουργήσουμε έναν πίνακα με περιεχόμενο όλους τους αριθμούς από το 1 έως το 30 ή όλα τα γράμματα από το «a» έως το «z».

<?php
 $minas = range(1,30);
 $alfabito = range('a','z');

 var_dump($minas);
 var_dump($alfabito);
?>

Μπορούμε επίσης να εισάγουμε και ανάποδες σειρές στα στοιχεία μας, δηλ , να ζητήσουμε ανάποδη αρίθμηση από το 10 στο 1 π.χ.

<?php
 $arithmisi = range(20,1);
 var_dump($arithmisi);
?>

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

<?php
 $evros = range("altitude","zombie");
 var_dump($evros);
?>

Γέμισμα πίνακα – array_pad()

Για να δημιουργήσουμε έναν πίνακα με συγκεκριμένο αριθμό θέσεων όπου στην αρχή θα διαθέτουν κάποιες από τις θέσεις του τιμές ενώ άλλες δεν θα διαθέτουν τότε χρησιμοποιούμε την εντολή «array_pad()». Δέχεται τρία ορίσματα, το πρώτο είναι ο πίνακας που θέλουμε να εμπεριέχεται μέσα στο γέμισμα, το δεύτερο όρισμα είναι το πόσες τιμές θέλουμε να διαθέτει ο νέος πίνακας ως ελάχιστο πλήθος (π.χ. 10), και το τρίτο όρισμα είναι η τιμή όπου θα εισάγεται στις κενές θέσεις (π.χ. 0). Η array_pad() επιστρέφει ως έξοδο έναν νέο πίνακα βασιζόμενο στα εισαγόμενα στοιχεία, αφήνοντας ανεπηρέαστο τον πίνακα που του δώσαμε ως είσοδο.

<?php
 $pinakas = array(25, 30);
 $gemisma = array_pad($pinakas,6,0);

 var_dump($gemisma);
?>

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

<?php
 $pinakas = array(10,20,30,10,40,20,30);
 $gemisma = array_pad($pinakas,6,0);

 var_dump($gemisma);
?>

Στα παραπάνω παραδείγματα οι νέες τιμές προστίθενται στο τέλος του παραγόμενου πίνακα. Αν θέλουμε όμως να εισάγουμε τις νέες τιμές. Στην αρχή του πίνακα και στο τέλος να προστεθούν οι τιμές που ήδη υπάρχουν τότε αρκεί ως δεύτερο όρισμα να εισάγουμε το ακέραιο αριθμό του πλήθος των στοιχείων που θέλουμε να έχει ο πίνακας, προσθέτοντας στην αρχή το αρνητικό σύμβολο «-».

<?php
 $times = array(20,30,40);
 $gemisma = array_pad($times,-6,0);

 var_dump($gemisma);
?>

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

<?php
 $omada = array(
  "Πρώτο_μέλος"=>"Ιωάννης",
  "Δεύτερο_μέλος"=>"Ευάγγελος");
 $gemisma = array_pad($omada,6,0);

 var_dump($gemisma);
?>

Το σύνολο των μεταβλητών που διαθέτει ένας πίνακας ονομάζεται μήκος των στοιχείων του πίνακα. Για «ρωτήσετε» τον πίνακα ποιο είναι το μήκος του, αρκεί να χρησιμοποιήσετε την μέθοδο «count()».

count($omada);

Για να αποκτήσουμε πρόσβαση σε μια μεταβλητή αρκεί μόνο να την καλέσουμε με το όνομα του πίνακα και τον δείκτη στον οποίο βρίσκεται π.χ. Γράφοντας «$omada[1]» θα χρησιμοποιηθεί το «Ευάγγελος».

Πίνακες πολλαπλών διαστάσεων

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

Ένας πίνακας δυο διαστάσεων απεικονίζεται με τον δημοφιλή τρόπο:

Όνομα Επώνυμο ΑΜ Βαθμός
Ιωάννα Δημητρίου 1256 5
Δημήτρης Ιωαννίδης 1345 8
Μάριος Παπαδόπουλος 1212 6

Κάθε γραμμή του πίνακα αποτελεί και μια εγγραφή του. Το πακέτο «Ιωάννα, Δημητρίου, 1256, 5» είναι μια ομάδα στοιχείων που αφορούν μια φοιτήτρια με όνομα «Ιωάννα», επώνυμο «Δημητρίου», Αριθμό μητρώου «1256» και βαθμό «5». Είναι δηλαδή ένας μονοδιάστατος πίνακας με 4 θέσεις όπου η θέση «0» αναπαριστά το «Όνομα» η θέση «1» το «Επώνυμο» κ.ο.κ.

Ένας πίνακας δύο διαστάσεων είναι ένας πίνακας όπου σε κάθε θέση του υπάρχει και από ένας άλλος πίνακας. Οι «γραμμές» που αναφέραμε παραπάνω είναι από μόνες τους ξεχωριστοί πίνακες, όπου συνθέτοντας τους όλους μαζί δημιουργείται ο πίνακας που συνολικά μας δίνει την εικόνα των δυο διαστάσεων. Ας δούμε ένα παράδειγμα χρήσης πινάκα με δυο διαστάσεις:

<?php
 $p1 = array("Ιωάννα","Δημητρίου","1256","5");
 $p2 = array("Δημήτρης","Ιωαννίδης","1345","8");
 $p3 = array("Μάριος","Παπαδόπουλος","1212","6");
 
 $pinakas2d = array($p1,$p2,$p3); //Οι πίνακες $p1,$p2,$p3 γίνονται γραμμές στον πίνακα $pinakas2d
 
 echo "<pre>";
 print_r($pinakas2d);
 echo "</pre>";
?>