2016-04-01 9 views
5

Data questa matrice:PHP: ordinare un array multi-dimensionale in base a un elenco di valori

Array 
(
    [0] => Array 
     (
      [status] => closed 
      [userModifiedAt] => 2015-12-09T11:47:46Z 
     ) 

    [1] => Array 
     (
      [status] => active 
      [userModifiedAt] => 2016-02-08T16:43:26Z 
     ) 

    [2] => Array 
     (
      [status] => closed 
      [userModifiedAt] => 2016-03-31T03:47:19Z 
     ) 

    [3] => Array 
     (
      [status] => pending 
      [userModifiedAt] => 2015-12-08T14:09:58Z 
     ) 

mi piacerebbe ordinarlo da [Stato] con questo ordine: - in attesa - attiva - chiuso

E per ogni stato, ordinare da [userModifiedAt].

sto usando questo codice:

usort($array, function($a,$b){ return strcmp($a['status'], $b['status']);}); 

ma funziona in ordine alfabetico, in modo lo stato è ordinato come: - attiva - chiuso - in attesa

Come posso ordinare un array in base a un elenco di ordini predefinito?

risposta

7

questo sarebbe un trucco -

## A array with the orders to be considered 
$order = array('active' => 1, 'closed' => 2, 'pending' => 3); 

usort($array, function($a, $b) use($order) { // Use the order array to compare 
    return $order[$a[status]] - $order[$b[status]]; 
}); 

var_dump($array); 

uscita

array(4) { 
    [0]=> 
    array(2) { 
    ["status"]=> 
    string(6) "active" 
    ["userModifiedAt"]=> 
    string(20) "2016-02-08T16:43:26Z" 
    } 
    [1]=> 
    array(2) { 
    ["status"]=> 
    string(6) "closed" 
    ["userModifiedAt"]=> 
    string(20) "2015-12-09T11:47:46Z" 
    } 
    [2]=> 
    array(2) { 
    ["status"]=> 
    string(6) "closed" 
    ["userModifiedAt"]=> 
    string(20) "2016-03-31T03:47:19Z" 
    } 
    [3]=> 
    array(2) { 
    ["status"]=> 
    string(7) "pending" 
    ["userModifiedAt"]=> 
    string(20) "2015-12-08T14:09:58Z" 
    } 
} 

Cambiare l'ordine array se volete l'ordine diverso. La chiave con il valore più basso sarà la prima su array. Se si desidera che sia chiuso prima, fornire il valore più basso nella matrice $order.

DEMO

+3

Ok così puoi anche fare magie? :) Non lo sapevo! –

+0

Ora a livello principiante. @HankyPanky :) –

+0

@Sougata grazie, è perfetto! –

Problemi correlati