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

Μέγεθος ενός πίνακα

Το μέγεθος ή μήκος ενός πίνακα είναι το συνολικό πλήθος των στοιχείων που διαθέτει. Δυο εντολές μας δίνουν το μήκος ενός πίνακα.

Η «count()» όπου παίρνει ως όρισμα έναν πίνακα και επιστρέφει το συνολικό μήκος του.

<?php
 //Αριθμημένος πίνακας
 $imeres = array("Δευτέρα","Τρίτη");
 $mikos = count($imeres);
 echo $mikos."<br/>";
 
 //Μη αριθμημένος πίνακας
 $omada = array(
  "Τεχνικός"=>"Παναγιώτης",
  "Υποστηριχτής"=>"Αριστομένης");
 $mikos = count($omada);
 echo $mikos;
?>

Η «sizeof()» όπου επίσης παίρνει ως όρισμα κι αυτή έναν πίνακα και επιστρέφει το μήκος του.

<?php
 //Αριθμημένος πίνακας
 $imeres = array("Δευτέρα","Τρίτη");
 $mikos = sizeof($imeres);
 echo $mikos."<br/>";
 
 //Μη αριθμημένος πίνακας
 $omada = array(
  "Τεχνικός"=>"Παναγιώτης",
  "Υποστηριχτής"=>"Αριστομένης");
 $mikos = sizeof($omada); 
 echo $mikos;
?>

Τόσο η sizeof όσο και η count() κάνουν ακριβώς το ίδιο πράγμα και επιστρέφουν ακριβώς τα ίδια αποτελέσματα αν χρησιμοποιηθούν σε ίδιο περιβάλλον.

Έλεγχος ύπαρξης ενός κλειδιού

Για να ελέγξουμε αν υπάρχει ένα κλειδί μέσα σε ένα πίνακα τότε θα χρησιμοποιήσουμε την εντολή «array_key_exists()». Η εντολή αυτή παίρνει ως πρώτο όρισμα ένα κλειδί και ως δεύτερο έναν πίνακα για να ελέγξει αν υπάρχει μέσα σε αυτόν το συγκεκριμένο κλειδί. Η εντολή αυτή επιστρέφει true αν υπάρχει το κλειδί μέσα στον πίνακα και false αν δεν υπάρχει. Αν χρησιμοποιούσαμε απλά την εντολή «if($pinakas['kleidi'])» τότε θα ήταν λάθος διότι δεν γίνεται έλεγχος του κλειδιού του πίνακα μέσω της if αλλά της τιμής που περιλαμβάνει αυτή η θέση.

<?php
 $car_price['suzuki'] = 3000;

 if(array_key_exists('suzuki',$car_price)){
  echo "Υπάρχει!";
 }
?>

Προσπέλαση με for και foreach

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

Έτσι ξέρουμε πως το πρώτο στοιχείο του πίνακα θα είναι πάντα στην θέση με δείκτη «0», ενώ το τελευταίο στην θέση «count($pinakas)-1».

Με βάση αυτή την λογική ας δούμε ένα παράδειγμα προσπέλασης αριθμημένου πίνακα μιας διάστασης.

<?php
 $students = array("Κώστας","Δημήτρης","Ιωάννα","Γιάννης","Ελένη");
 for($i=0;$i<count($students);$i++){
    echo $students[$i]."<br/>";
 }
?>

Το αποτέλεσμα επιβεβαιώνει την σωστή χρήση των δεικτών στους πίνακες. Ο πίνακας με μήκος «5» θέσεων, ξεκινά το μέτρημα των θέσεων του από την θέση 0 και τελειώνει στην θέση 4. Γι αυτό και χρησιμοποιούμε τον τελεστή σύγκρισης «<» στην συνθήκη επανάληψης. Η μεταβλητή «$i» θα αλλάξει διαδοχικά τιμές από το 0 που την ορίσαμε έως το 4.

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

Προσπέλαση με την each()

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

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

  • current()
    Επιστρέφει το στοιχείο στο οποίο ο δείκτης μας δείχνει εκείνη την στιγμή.
  • reset()
    Τοποθετεί τον δείκτη στο πρώτο στοιχείο του πίνακα.
  • next()
    Τοποθετεί τον δείκτη στο επόμενο στοιχείο του πίνακα από ότι είμαστε.
  • prev()
    Τοποθετεί τον δείκτη στο προηγούμενο στοιχείο του πίνακα από ότι είμαστε.
  • end()
    Τοποθετεί τον δείκτη στο τέλος του πίνακα στον οποίο βρισκόμαστε.
  • each()
    Επιστρέφει το κλειδί και την τιμή ενός στοιχείου σε έναν πίνακα και ύστερα μετακινεί τον δείκτη στο επόμενο στοιχείο.
  • key()
    Επιστρέφει το κλειδί το στοιχείο που ο δείκτης βρίσκεται εκείνη την στιγμή.

Η εντολή each() μπορεί εκτός από αυτόνομα, να χρησιμοποιηθεί και μέσα σε βρόγχους έτσι ώστε να προσπελάσουμε κάθε στοιχείο ενός πίνακα.

<?php 
 $epafi = array("Όνομα"=>"Κώστας","Ηλικία"=>24,"Τηλέφωνο"=>2101234567);
 reset($epafi);

 while(list($kleidi, $timi)=each($epafi)){
  echo "{$kleidi} : {$timi} </br>";
 }
?>

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

Ανάζητηση στοιχείων

in_array()

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

<?php 
 $trofima = array(
   'Ντομάτα' => 6.1,
   'Φράουλα'   => 3.2,
   'Ζάχαρη' => '1.0');

 echo "Πρώτο: ".in_array(1.0,$trofima);
 echo "<br/>";
 echo "Δεύτερο:".in_array(1.0,$trofima,true);
?>

Βλέπουμε πως στην πρώτη περίπτωση που δεν ψάχνουμε και για ταίριασμα τύπου δεδομένων το αποτέλεσμα είναι true, ενώ στην δεύτερη περίπτωση το αποτέλεσμα είναι τίποτα, δηλαδή false.

array_search()

Εκτός από την αναζήτηση για το αν υπάρχει ένα στοιχείο μπορούμε να αναζητήσουμε και την ακριβή θέση του στοιχείου με την εντολή array_search() η οποία δέχεται τα ίδια ορίσματα με την in_array() και επιστρέφει το κλειδί της θέσεως στην οποία βρέθηκε το στοιχείο το οποίο ψάχνουμε.

<?php 
 $trofima = array(
   'Ντομάτα' => 6.1,
   'Φράουλα'   => 3.2,
   'Ζάχαρη' => '1.0');

 echo "Πρώτο: ".array_search(1.0,$trofima);
 echo "<br/>";
 echo "Δεύτερο:".array_search(1.0,$trofima,true);
?>

Προσπέλαση πινάκων με δυο διαστάσεις

Οι στήλες αναφέρονται στις θέσεις των εσωτερικών πινάκων, ενώ οι γραμμές στον πίνακα-σύνολο που περιέχει τους εσωτερικούς πίνακες. Ας θεωρήσουμε πως οι γραμμές είναι η μεταβλητή «$i» και οι στήλες η μεταβλητή «$j». Για να χρησιμοποιήσουμε την τιμή «1345» από τον παρακάτω πίνακα θα πρέπει να πούμε σε ποια γραμμή και σε ποια στήλη βρίσκεται. Για λόγους ευκολίας θα χρησιμοποιούμε ΠΡΩΤΑ την γραμμή και μετά την στήλη… άρα βρίσκεται στην θέση «1,2», όπου $i=1 και $j=2.

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

Ας δούμε ένα παράδειγμα προσπέλασης πίνακα με δυο διαστάσεις.

<?php
 $students = array(
  array("Ιωάννα","Δημητρίου","1256","5"),
  array("Δημήτρης","Ιωαννίδης","1345","8"),
  array("Μάριος","Παπαδόπουλος","1212","6")
 );
 
 echo "<table border='1'>";
 for($i=0;$i<count($students);$i++){
  echo "<tr>";
  for($j=0;$j<count($students[$i]);$j++){
   echo "<td>".$students[$i][$j]."</td>";
  }
  echo"</tr>";
 }
 
 echo "</table>";
?>

Όπως βλέπουμε στον κώδικα ο πίνακας ονομάζεται «$students» ενώ για να ζητήσουμε μια θέση μέσα σε αυτόν, ανάλογα τις διαστάσεις του χρησιμοποιούμε δείκτες μέσα σε άγκιστρα π.χ. «$students[1][2]» το οποίο θα μας δώσει «1345».

Στο δεύτερο for όταν θέλουμε να ζητήσουμε το μέγεθος του υπό-πίνακα ζητάμε απλά το μήκος της θέσης του πίνακα δηλαδή «$students[0]» είναι ίσο με το «array("Ιωάννα","Δημητρίου","1256","5")» και συνεπώς επιστρέφεται ο αριθμός 4.

Ας δούμε το ίδιο παράδειγμα προσπέλασης χρησιμοποιώντας «foreach» αντί για «for».

<?php
 $students = array(
  array("Ιωάννα","Δημητρίου","1256","5"),
  array("Δημήτρης","Ιωαννίδης","1345","8"),
  array("Μάριος","Παπαδόπουλος","1212","6")
 );
 
 echo "<table border='1'>";
 foreach($students as $value){
  echo "<tr>";
  foreach($value as $value2){
   echo "<td>".$value2."</td>";
  }
  echo "</tr>";
 }
 
 echo "</table>";
?>

H μεταβλητή «$value» γίνεται ο πίνακας που υπάρχει σε κάθε γραμμή του πίνακα «$students». Επομένως μετατρέπεται ως το όρισμα της δεύτερης «foreach» που από αυτήν θα πάρουμε τις τιμές.

Κατά την πρώτη επανάληψη της πρώτης «foreach» το «$value» θα είναι ίσο με «array("Ιωάννα" , "Δημητρίου" , "1256" , "5")» επομένως η πρώτη επανάληψη της δεύτερης «foreach», η μεταβλητή «$value2» θα πάρει την τιμή «"Ιωάννα"».