Ordinare un array PHP in ordine crescente o decrescente in base a uno specifico valore

Un array può essere costituito da tante combinazioni di chiave-valore, ottenere l'output ordinato in base ad uno di questi usando metodi già integrati nella core di PHP

Pubblicato da ,
Ultima modifica

Tra le costanti predefinite di PHP ci sono SORT_ASCSORT_DESC usate con il metodo array_multisort() e utilizzate per ordinare un array rispettivamente in ordine crescente e decrescente in base a uno specifico valore.

Se per esempio abbiamo un array così composto:

Codice PHP

 <?php 
$array=
[ 
   [ 
   'userID'=>24, 
   'name'=>'Florence', 
   'distance'=>1.5 
   ], 
   [ 
   'userID'=>1, 
   'name'=>'Mike', 
   'distance'=>2 
   ], 
   [ 
   'userID'=>211, 
   'name'=>'John', 
   'distance'=>1 
   ], 
   [ 
   'userID'=>13, 
   'name'=>'Mark', 
   'distance'=>12.76 
   ] 
];

dove gli indici sono array aventi le stesse chiavi ma con valori differenti, e vogliamo ordinarlo in modo crescente per distanza ('distance') .

Usiamo il metodo array_column() per ottenere un array costituito da tutti i valori di una singola chiave:

Codice PHP

 <?php
........ ........ 
$values=array_column($array,'distance'); 
var_dump($values); 

/* Output 
array(4) 
{ 
  [0]=> float(1.5) 
  [1]=> int(2) 
  [2]=> int(1) 
  [3]=> float(12.76) 
} 
*/

passiamo questo array così ottenuto al metodo array_multisort(), la costante SORT_ASC e l'array di esempio:

Codice PHP

 <?php 
........ 
........ 

$values=array_column($array,'distance');
$order=array_multisort($values,SORT_ASC,$array); 
var_dump($order);

/* Output TRUE o FALSE */

la variabile $order restituirà un valore booleano TRUE se l'array di esempio è stato ordinato in ordine crescente per distanza ('distance')

Codice PHP

 <?php 
........ 
........ 

if($order)
{ 
var_dump($array); 

/* Output 
Array 
( 
[0] => Array 
( 
[userID] => 211 
[name] => John 
[distance] => 1 
) 

[1] => Array 
( 
[userID] => 24 
[name] => Florence 
[distance] => 1.5 
) 

[2] => Array 
( 
[userID] => 1 
[name] => Mike 
[distance] => 2 
) 

[3] => Array 
( 
[userID] => 13 
[name] => Mark 
[distance] => 12.76 
) 
) 
*/ 
}

usiamo la costante SORT_DESC se invece vogliamo un ordinamento decrescente.