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

Πράξεις μεταξύ πινάκων

Οι βασικότερες πράξεις μέσω των οποίων αλληλεπιδρών οι μεταβλητές στην php δρουν επίσης με παρόμοιο τρόπο στο πώς δυο πίνακες συμπεριφέρονται μεταξύ τους.

Πράξη Ονομασία Επεξήγηση
$a+$b Ένωση Ενώνονται οι πίνακες $a και $b
$a==$b Ισότητα Ελέγχεται αν οι δύο πίνακες έχουν ίδια κλειδιά και τιμές και επιστρέφεται true αν έχουν, false αν δεν έχουν.
$a===$b Ταυτότητα Ελέγχονται για ίδιες τιμές και κλειδιά και επίσης για ίδιους τύπους στα στοιχεία των δυο πινάκων και επιστρέφεται true αν ισχύουν και τα τρία.
$a!=$b Ανισότητα Αν οι δυο πίνακες δεν ειναι ίσοι μεταξύ (πανομοιότυποι) τους επιστρέφεται true.
$a<>$b Ανισότητα Παρόμοια με την προηγούμενη
$a!==$b Αντίθετη ταυτότητα Ελέγχεται αν οι δυο πίνακες δεν έχουν ίδιους τύπους (ας έχουν ίδια κλειδιά και τιμές) και επιστρέφεται true.

Ας δούμε ένα παράδειγμα με όλα τα παραπάνω:

<?php
 $a = array("a"=>"Αχλάδια","b"=>"Μπανάνες","c"=>"Κεράσια");
 $b = array("a"=>"Αχλάδια","b"=>"Μπανάνες","d"=>"Βερίκοκα");
 $c = array(3,4,5);
 $c1 = array(3,4,5);
 $d = array(3.0,4.0,5.2); 
 
 //Θα προστεθούν όσα στοιχεία με κριτήριο το κλειδί 
 //τους υπάρχουν στο b αλλα δεν υπάρχουν στο a.
 var_dump($a+$b);
 echo "<br/><br/>";
 var_dump($a+$c);
 
 echo "<br/><br/>";
 
 var_dump($c==$c1); //Ισότητα
 echo "<br/>";
 var_dump($c===$c1); //Ταυτότητα
 echo "<br/>";
 var_dump($c!=$d); //Ανισότητα
 echo "<br/>";
 var_dump($c<>$d); //Ανισότητα
 echo "<br/>";
 var_dump($c!==$d); //Μη ταυτότητα
?>

Υπολογισμός αθροίσματος

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

<?php 
 $a = range(1,10);
 echo array_sum($a);
 echo "<br/>";
 
 $b = array("Πρώτο"=>40,"Δεύτερο"=>30);
 echo array_sum($b);
  echo "<br/>";
 
 $c = array("Όνομα"=>"Ιωάννης", "Ηλικία" => 20, 40,10.0);
 echo array_sum($c);
?>

Διαφορά μεταξύ δυο πινάκων

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

array_diff()

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

<?php 
 $a = array("Νίκος","Κώστας","Γιάννης");
 $b = array("Νίκος",10,20,30);
 $c = array(0.0, 30,10,false,"Γιάννης",30);
 
 $diafora = array_diff($a,$b,$c);
 echo "<pre>";
 print_r($diafora);
 echo "</pre>";
?>

Κάθε στοιχείο ελέγχεται μέσω του τελεστή του τριπλού ίσον που σημαίνει πως εκτός από την ισότητα περιεχομένου ελέγχεται και αν το περιεχόμενο είναι ίδιου τύπου. Έτσι το 10 ως ακέραιος και το "10" ως αλφαριθμητικό δεν είναι ίδιο.

array_diff_key()

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

<?php 
 $a = array(0.0, 30,10,false,"Γιάννης",30);
 $b = array("Νίκος","Κώστας","Γιάννης");
 $c = array("Νίκος",10,20,30);
 
 $diafora = array_diff_key($a,$b,$c);
 echo "<pre>";
 print_r($diafora);
 echo "</pre>";
?>

array_diff_assoc()

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

<?php 
 $a = array(0.0, 30,10,false,"Γιάννης",30);
 $b = array("Νίκος","Κώστας","Γιάννης");
 $c = array("Νίκος",20,10,30);
 
 $diafora = array_diff_assoc($a,$b,$c);
 echo "<pre>";
 print_r($diafora);
 echo "</pre>";
?>

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

Ένωση

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

<?php
 $foitites = array("Κωνσταντίνος","Δημήτριος","Ιωάννης");
 $kathigites = array("Παναγιώτης","Χρήστος","Γεώργιος");
 
 $tei = array_merge($foitites,$kathigites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

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

<?php
 $foitites = array(1=>"Κωνσταντίνος",4=>"Δημήτριος");
 $kathigites = array(1=>"Παναγιώτης",4=>"Χρήστος",0=>"Γεώργιος");
 
 $tei = array_merge_recursive($kathigites,$foitites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

Τομή

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

<?php
 $foitites = array("a"=>"Κωνσταντίνος","e"=>"Δημήτριος");
 $kathigites = array("b"=>"Κωνσταντίνος","w"=>"Χρήστος");
 
 $tei = array_intersect($foitites,$kathigites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

Παρομοίως η εντολή array_intersect_key() επιστρέφει την τομή ενός πλήθους πινάκων βασιζόμενη όμως στα κλειδιά και όχι στις τιμές. Για τα όμοια κλειδιά που ανακαλύπτονται επιστρέφεται η τιμή που βρίσκεται μόνο στον πρώτο πίνακα.

<?php
 $foitites = array("a"=>"Κωνσταντίνος","e"=>"Δημήτριος");
 $kathigites = array("b"=>"Κωνσταντίνος","e"=>"Χρήστος");
 
 $tei = array_intersect_key($foitites,$kathigites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

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

&<?php
 $foitites = array("a"=>"Κωνσταντίνος","e"=>"Δημήτριος");
 $kathigites = array("a"=>"Κωνσταντίνος","e"=>"Χρήστος");
 
 $tei = array_intersect_assoc($foitites,$kathigites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

Μοναδικότητα

Η εντολή array_unique() δέχεται ως όρισμα έναν μοναδικό πίνακα, και επιστρέφει έναν νέο πίνακα στον οποίο έχουν αφαιρεθεί οι διπλότυπες τιμές του πίνακα που εισάγαμε.

<?php
 $foitites = array(
        "a"=>"Κωνσταντίνος",
        "e"=>"Δημήτριος",
        "a"=>"Γεώργιος",
        "e"=>"Χρήστος",
        1=>"Κωνσταντίνος",
        2=>"Χρήστος",
        "ω"=>"Δημήτριος",
        "ε"=>"Γεώργιος");
 
 $tei = array_unique($foitites);
 
 echo "<pre>";
 print_r($tei);
 echo "</pre>";
?>

Προαιρετικά μπορούμε να εισάγουμε και ένα δεύτερο όρισμα που καθορίζει τον τρόπο με τον οποίο θα συμπεριφερθεί η εντολή, ο παρακάτω πίνακας επεξηγεί την λειτουργία τους:

  • SORT_REGULAR
    Ελέγχει τα στοιχεία κανονικά χωρίς να αλλάζει τύπους.
  • SORT_NUMERIC
    Ελέγχει τα στοιχεία αριθμητικά.
  • SORT_STRING
    Ελέγχει τα στοιχεία ως αλφαριθμητικά.
  • SORT_LOCALE_STRING
    Ελέγχει τα στοιχεία ως αλφαριθμητικά με βάση την εκάστοτε γλώσσα.

Στοίβα

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

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

Κάπως έτσι λειτουργεί και η στοίβα στον προγραμματισμό, είναι μια δομή LIFO (Last In First Out – Ότι μπαίνει τελευταίο βγαίνει πρώτο). Στην php κάθε πίνακας που δημιουργείται μπορεί να συμπεριφερθεί σαν στοίβα αρκεί να χρησιμοποιήσουμε τις κατάλληλες εντολές

  • Η εντολή array_shift() δέχεται έναν πίνακα ως όρισμα , επαναφέρει τον δείκτη του στην αρχή του και επιστρέφει την τιμή του στοιχείου σε αυτή την θέση. Το στοιχείο επιστρέφεται έχοντας αφαιρεθεί από την στοίβα. Τα αριθμημένα κλειδιά αναπροσαρμόζονται.
  • Η εντολή array_push() δέχεται ως όρισμα έναν πίνακα και μια τιμή οποιαδήποτε τύπου δεδομένων και την εισάγει στον πίνακα που εισάγαμε ως πρώτο όρισμα, η θέση του νέου στοιχείο θα είναι ακριβώς στο τέλος του πίνακα κάθε φορά.
  • Η εντολή array_pop() δέχεται ως όρισμα έναν πίνακα και επιστρέφει το τελευταίο του στοιχείο, επίσης μετά την εκτέλεση της επαναφέρει τον δείκτη του πίνακα στην πρώτη του θέση.  Το στοιχείο επιστρέφεται έχοντας αφαιρεθεί από τον στοίβα. Τα αριθμημένα κλειδιά αναπροσαρμόζονται.
  • Η εντολή array_unshift() δέχεται ως πρώτο όρισμα έναν πίνακα και ως δεύτερο ένα σύνολο από τιμές και ύστερα εισάγει αυτές τις τιμές στην αρχή του πίνακα αλλάζοντας ταυτόχρονα όλα (ΜΟΝΟ) τα αριθμητικά κλειδιά των υπόλοιπων στοιχείων έτσι ώστε οι νεοεισερχόμενες τιμές να ξεκινήσουν με κλειδιά από «μηδέν». Τα μη αριθμητικά κλειδιά δεν θα επηρεαστούν από την εκτέλεση της εντολής.
<?php 
function tiposi($pinakas){
  echo "<br/>";
  echo "<br/>";
  print_r($pinakas);
  echo "<br/>";
  echo "<br/>";
 }
 
 $stiba = range(5,20,2);
 echo "Αρχικός πίνακας:";
 tiposi($stiba);
 
 $shift = array_shift($stiba); //έξοδος πρώτου στοιχείου
 echo "Το πρώτο στοιχείο: ".$shift."<br/>";
 
 $pop = array_pop($stiba);//έξοδος τελευταίου στοιχείου
 echo "Το τελευταίο στοιχείο : ".$pop."<br/>";
 
 array_push($stiba,30); //προσθήκη στοιχείου στο τέλος
 echo "Πίνακας μετά από αφαίρεση στοιχείων και πρόσθεση";
 tiposi($stiba);
 
 array_unshift($stiba,10,40,50,60); //εισαγωγή νέων τιμών
 echo "Πίνακας μετά από την προσθήκη τιμών στην αρχή του";
 tiposi($stiba);
?>

Χρησιμοποιούμε την μέθοδο «tiposi» για μεγαλύτερη ευκολία στην τύπωση αποτελεσμάτων. Για να μάθετε περισσότερα για τις μεθόδους ανατρέξτε στο ανάλογο κεφάλαιο.