Sortera ett associativt multidimensionellt fält

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