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

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

Αϋξουσα Φθίνουσα Επεξήγηση
sort() rsort() Ταξινόμηση με την τιμή σε καινούργιο αριθμημένο πίνακα με κλειδιά απο το 0.
asort() arsort() Ταξινόμηση με βάση την τιμή.
ksort() krsort() Ταξινόμηση με βάση τα κλειδιά.
array_multisort() Ταξινόμηση πολλών πινάκων ταυτόχρονα.

Αύξουσα ταξινόμηση τιμών - sort()

Η συνάρτηση «sort()» ταξινομεί τις τιμές ενός πίνακα με κλειδιά σε αύξουσα σειρά. Δηλαδή από το Α … έως το Ω και από το 0 έως το 9. Τα κεφαλαία πάνε πριν τα πεζά και όλα τα γράμματα πάνε πριν τους αριθμούς. Επίσης οι λατινικοί χαρακτήρες πάνε πριν τους ελληνικούς.

<?php
 $pinakas = array('W', 3 , 5, 'δ', 6, 'β', 'R', 10);
 sort($pinakas);
 
 foreach($pinakas as $value){
  echo $value." ";
 }
?>

Φθίνουσα ταξινόμηση τιμών - rsort()

Η συνάρτηση «rsort()» ταξινομεί τις τιμές ενός πίνακα με κλειδιά σε φθίνουσα σειρά. Δηλαδή από το Ω … έως το Α και από το 9 έως το 0. Τα πεζά πάνε πριν τα κεφαλαία και όλοι οι αριθμοί πάνε πριν τα γράμματα. Επίσης οι ελληνικοί χαρακτήρες πάνε πριν τους λατινικούς.

<?php
 $pinakas = array('W', 3 , 5, 'δ', 6, 'β', 'R', 10);
 rsort($pinakas);
 
 foreach($pinakas as $value){
  echo $value." ";
 }
?>

Αύξουσα ταξινόμηση σε μη αριθμημένο πίνακα - asort()

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

<?php 
 $pinakas = array(
  "Δείκτης_3" => "Τιμή_3",
  "Δείκτης_4" => "Τιμή_4",
  "Δείκτης_1" => "Τιμή_1",
  "Δείκτης_2" => "Τιμή_2"
 );
 
 print_r($pinakas); //Τύπωση αρχικού πίνακα
 echo "<br/><br/>"; //κενός χώρος
 asort($pinakas); //ταξινόμηση τιμών διατηρώντας τους δείκτες
 print_r($pinakas); //εκτύπωση πίνακα
?>

Φθίνουσα ταξινόμηση σε μη αριθμημένο πίνακα - arsort()

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

<?php 
 $pinakas = array(
  "Δείκτης_3" => "Τιμή_3",
  "Δείκτης_4" => "Τιμή_4",
  "Δείκτης_1" => "Τιμή_1",
  "Δείκτης_2" => "Τιμή_2"
 );
 
 print_r($pinakas); //Τύπωση αρχικού πίνακα
 echo "<br/><br/>"; //κενός χώρος
 arsort($pinakas); //ταξινόμηση τιμών διατηρώντας τους δείκτες
 print_r($pinakas); //εκτύπωση πίνακα
?>

Αύξουσα ταξινόμηση κλειδιών - ksort()

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

<?php 
 $pinakas = array(
  "Β" => "Κώστας",
  "Δ" => "Γιάννης",
  "Α" => "Αντώνης",
  "Γ" => "Δημήτρης"
 );
 
 print_r($pinakas); //Τύπωση αρχικού πίνακα
 echo "<br/><br/>"; //κενός χώρος
 ksort($pinakas); //ταξινόμηση δεικτών διατηρώντας τις τιμές
 print_r($pinakas); //εκτύπωση πίνακα
?>

Φθίνουσα ταξινόμηση κλειδιών - krsort()

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

<?php 
 $pinakas = array(
  "Β" => "Κώστας",
  "Δ" => "Γιάννης",
  "Α" => "Αντώνης",
  "Γ" => "Δημήτρης"
 );
 
 print_r($pinakas); //Τύπωση αρχικού πίνακα
 echo "<br/><br/>"; //κενός χώρος
 krsort($pinakas); //ταξινόμηση δεικτών διατηρώντας τις τιμές
 print_r($pinakas); //εκτύπωση πίνακα
?>

Ταξινόμηση πολλαπλών πινάκων

Η «array_multisort()» μας δίνει την δυνατότητα να μπορέσουμε να ταξινομήσουμε πολλούς πίνακες ταυτόχρονα με βάση τον πρώτο που θα εισάγουμε. Γίνεται δηλαδή ταξινόμηση του πρώτου πίνακα και τα αντιστοιχιζόμενα στοιχεία στους υπόλοιπους πίνακες μετακινούνται με βάση την θέση που άλλαξαν τα στοιχεία του πρώτου πίνακα. Αν θεωρήσουμε πως για τον παρακάτω πίνακα ο «"Κώστας"» έχει βαθμό «7» και βρίσκεται στο τμήμα «"Πληροφορικής"» τότε θα ταξινομηθεί το όνομα του και τα υπόλοιπα στοιχεία θα πάρουν την ανάλογη θέση που βρίσκεται και το όνομα. Η αντιστοίχηση γίνεται κατά αύξουσα από προεπιλογή.

<?php
 $onoma = array("Κώστας","Γιάννης","Δημήτρης","Αντώνης");
 $bathmos = array(7,6,5,10);
 $tmhma = array("Πληροφορικής","Ιατρικό","Ηλεκτρολογικό","Φαρμακευτικό");
 
 array_multisort($onoma,$bathmos,$tmhma);
 print_r($onoma);
 echo "<br />";
 print_r($bathmos);
 echo "<br />";
 print_r($tmhma);
 echo "<br />";
?>

Όπως βλέπουμε ο «"Κώστας"» βρίσκεται 4ος όπως επίσης και ο βαθμός του αλλά και το τμήμα του. Δεν ταξινομούνται δηλαδή οι υπόλοιποι πίνακες κατά αύξουσα αλλά μόνο ο πρώτος και οι υπόλοιποι αντιστοιχίζονται.

Αν ο πρώτος πίνακας διαθέτει τιμές που είναι πανομοιότυπες … π.χ. υπάρχουν δύο Κώστηδες, τότε η «array_multisort» στο σημείο των δυο πανομοιότυπων θα ταξινομήσει με βάση τον δεύτερο πίνακα.

<?php
 $onoma = array("Κώστας","Γιάννης","Δημήτρης","Κώστας");
 $bathmos = array(7,6,5,10);
 $tmhma = array("Πληροφορικής","Ιατρικό","Ηλεκτρολογικό","Φαρμακευτικό");
 
 array_multisort($onoma,$bathmos,$tmhma);
 print_r($onoma);
 echo "<br />";
 print_r($bathmos);
 echo "<br />";
 print_r($tmhma);
 echo "<br />";
?>

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

Αν θέλουμε να αλλάξουμε τρόπο με τον οποίο γίνεται η ταξινόμηση από αύξουσα σειρά σε φθίνουσα, τότε μπορούμε να χρησιμοποιήσουμε ένα προαιρετικό στοιχείο μετά από τον κάθε πίνακα στην εντολή «array_multisort».

  • «SORT_ASC», ταξινομεί κατά αύξουσα σειρά (προεπιλογή,
  • «SORT_DESC», ταξινομεί κατά φθίνουσα σειρά.
<?php
 $onoma = array("Κώστας","Γιάννης","Δημήτρης","Κώστας");
 $bathmos = array(7,6,5,10);
 $tmhma = array("Πληροφορικής","Ιατρικό","Ηλεκτρολογικό","Φαρμακευτικό");
 
 array_multisort($onoma, SORT_ASC, $bathmos, SORT_DESC , $tmhma);
 print_r($onoma);
 echo "<br />";
 print_r($bathmos);
 echo "<br />";
 print_r($tmhma);
 echo "<br />";
?>

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

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

<?php
 $foithtes = array(
  array(
   'Όνομα' => "Κώστας",
   'Βαθμός' => 7,
   'Τμήμα' => 'Πληροφορικής'
  ),
  array(
   'Όνομα' => "Γιάννης",
   'Βαθμός' => 5,
   'Τμήμα' => 'Ιατρικό'
  ),
  array(
   'Όνομα' => "Δημήτρης",
   'Βαθμός' => 5,
   'Τμήμα' => 'Ηλεκτρολογικό'
  ),
  array(
   'Όνομα' => "Κώστας",
   'Βαθμός' => 10,
   'Τμήμα' => 'Φαρμακευτικό'
  )
 );

 array_multisort($foithtes);
 echo "<pre>";
 print_r($foithtes);
 echo "</pre>"; 
?>