Funzioni di ordinamento array

Funzioni di ordinamento array

Tra le operazioni che si possono effettuare con gli array, non può mancare la possibilità di ordinare gli elementi in un determinato ordine.

PHP mette a disposizione diverse funzioni native per ordinare in ordine crescente o decrescente gli elementi di un array, in ordine alfabetico se gli elementi sono stringhe, dal più piccolo al più grande o viceversa se gli elementi sono numeri.

Di seguito le funzioni più comunemente usate ed esempi di utilizzo di tali funzioni:

  • sort(): consente l'ordinamento di array numerici in ordine crescente.
  • rsort(): consente l'ordinamento di array numerici in ordine decrescente.
  • asort(): consente l'ordinamento in ordine crescente di array associativi in base al valore degli elementi.
  • arsort(): consente l'ordinamento in ordine decrescente di array associativi in base al valore degli elementi.
  • ksort(): consente l'ordinamento in ordine crescente di array associativi in base alla chiave degli elementi.
  • krsort(): consente l'ordinamento in ordine decrescente di array associativi in base alla chiave degli elementi.

Ordinamento di array numerici

La funzione sort() viene utilizzata per ordinare gli elementi di un array numerico in ordine crescente:

<?php
$names = ["Mario", "Alberto", "Pippo", "Tizio", "Caio", "Sempronio"];

sort($names);

var_dump($names);

/* Output

array(6) {
  [0]=>
  string(7) "Alberto"
  [1]=>
  string(4) "Caio"
  [2]=>
  string(5) "Mario"
  [3]=>
  string(5) "Pippo"
  [4]=>
  string(9) "Sempronio"
  [5]=>
  string(5) "Tizio"
}

*/

La funzione rsort() invece consente l'ordinamento degli elementi in ordine decrescente:

<?php
$numbers = [12, 50, 8, 43, 1, 14];

rsort($numbers);

var_dump($numbers);

/* Output

array(6) {
  [0]=>
  int(50)
  [1]=>
  int(43)
  [2]=>
  int(14)
  [3]=>
  int(12)
  [4]=>
  int(8)
  [5]=>
  int(1)
}

*/

Nota: le associazioni tra indici ed elementi vengono perse, a seguito dell'ordinamento tramite le funzioni sort() e asort().

Ordinamento di array associativi in base al valore

La funzione asort() viene utilizzata per ordinare un array associativo in ordine crescente, in base al valore degli elementi:

<?php
$countries = [
    "en" => "Inghilterra", 
    "de" => "Germania", 
    "es" => "Spagna", 
    "it" => "Italia", 
    "fr" => "Francia"
];

asort($countries);

var_dump($countries);

/* Output

array(5) {
  ["fr"]=>
  string(7) "Francia"
  ["de"]=>
  string(8) "Germania"
  ["en"]=>
  string(11) "Inghilterra"
  ["it"]=>
  string(6) "Italia"
  ["es"]=>
  string(6) "Spagna"
}

*/

Al contrario la funzione arsort() ordina gli elementi dell'array associativo in maniera decrescente, sempre in base al loro valore:

<?php
$colors = [
    'red' => "rosso", 
    'green' => "verde", 
    'yellow' => "giallo", 
    'white' => "bianco", 
    'black' => "nero"
];

arsort($colors);

var_dump($colors);

/* Output

array(5) {
  ["green"]=>
  string(5) "verde"
  ["red"]=>
  string(5) "rosso"
  ["black"]=>
  string(4) "nero"
  ["yellow"]=>
  string(6) "giallo"
  ["white"]=>
  string(6) "bianco"
}

*/

Ordinamento di array associativi in base alla chiave

Concludiamo questa guida con le funzioni ksort() e krsort(), che consentono di ordinare rispettivamente in ordine crescente e decrescente gli elementi di un array associativo in base alla loro chiave:

<?php
$numbers = [
    "10" => "dieci", 
    "40" => "quaranta", 
    "50" => "cinquanta", 
    "20" => "venti", 
    "30" => "trenta"
];

ksort($numbers); // Ordinamento crescente in base alle chiavi

var_dump($numbers);

krsort($numbers); // Ordinamento decrescente in base alle chiavi

var_dump($numbers);

/* Output

array(5) {
  [10]=>
  string(5) "dieci"
  [20]=>
  string(5) "venti"
  [30]=>
  string(6) "trenta"
  [40]=>
  string(8) "quaranta"
  [50]=>
  string(9) "cinquanta"
}

array(5) {
  [50]=>
  string(9) "cinquanta"
  [40]=>
  string(8) "quaranta"
  [30]=>
  string(6) "trenta"
  [20]=>
  string(5) "venti"
  [10]=>
  string(5) "dieci"
}

*/

Nota: in questo l'associazione tra indici ed elementi sono preservate, in quanto si tratta di array associativi.

Ordinamento di array multidimensionali

Tra le funzioni per l'ordinamento di array, ne esiste una per l'ordinamento di array multidimensionali: array_multisort().

La funzione array_multisort() consente di ordinare più array insieme o un array multidimensionale, rispetto a una o più delle sue dimensioni.

Vediamo prima un esempio di utilizzo nel caso dell'ordinamento di più array:

<?php
$ar1 = [10, 100, 100, 0];
$ar2 = [1, 3, 2, 4];
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);

/* Output

array(4) {
  [0]=>
  int(0)
  [1]=>
  int(10)
  [2]=>
  int(100)
  [3]=>
  int(100)
}
array(4) {
  [0]=>
  int(4)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
}

*/

Per una panoramica completa sulle funzioni PHP per l'ordinamento di array, consulta il seguente indirizzo https://www.php.net/manual/en/array.sorting.php.

Guida successiva: Operatori PHP