Låt oss säga att vi har följande multidimensionella fält som vi vill sortera efter dess namnattribut.
$data = array( array( 'id' => 632, 'name' => 'foo' ), array( 'id' => 633, 'name' => 'bar' ), array( 'id' => 634, 'name' => 'baz' ), array( 'id' => 635, 'name' => 'qux' ) );
För att göra detta så finns följande metod:
function cmp( $a, $b ) { return strcmp( $a[ 'name' ], $b[ 'name' ] ); } usort( $data, 'cmp' );
Vidare kan vi göra en hjälpare om vi känner för detta.
/** * Klassen behöver inte instansieras och har därför en privat * konstruktor. * Använd den statiska metoden sort() * * @see function sort */ class Helper { /** * @var String */ private $key; /** * @param String $key */ private function __construct( $key ) { $this->key = $key; } /** * @param String $a * @param String $b * * @return Integer */ public function ascCmp( $a, $b ) { return strcmp( $a[ $this->key ], $b[ $this->key ] ); } /** * @param String $a * @param String $b * * @return Integer */ public function descCmp( $a, $b ) { return strcmp( $b[ $this->key ], $a[ $this->key ] ); } /** * Sorterar datan efter angivet nyckelattribut * * @param Array $data * @param String $key * @param Boolean $asc [optional] default = true * * @return Boolean */ public static function sort( &$data, $key, $asc = true ) { return usort( $data, array( new self( $key ), $asc ? 'ascCmp' : 'descCmp' )); } }
Länkar
http://php.net/manual/en/function.usort.php
http://php.net/manual/en/array.sorting.php