PHP多维数组根据内部元素排序

PHP multi array sort by an element nested inside

usort

倘若让数组根据[data]元素的大小重新排序:

$data = array(
		array(
				'name'=>'Julie',
				'key'=>'64489c85dc2fe0787b85cd87214b3810',
				'age'=>20
		),
			
		array(
				'name'=>'Martin',
				'key'=>'bb07c989b57c25fd7e53395c3e118185',
				'age'=>18
		),

		array(
				'name'=>'Lucy',
				'key'=>'ab3aec6d954571c7551a186ea1cd98ff',
				'age'=>100
		),

		array(
				'name'=>'Jessica',
				'age'=>25,
				'key'=>'e1a118c9178aa3538f39a9c8131938ed'
		),
);

使用 usort 重排

class itcArraySort
{
	private $arr = array();

	public function __construct($arr)
	{
		$this->arr = $arr;
	}

	public function doSort($key,$order='ASC')
	{
		$cmp =  function($a, $b) use($key,$order){
			
			if ($a[$key] == $b[$key]) return 0;
			
			if($order ==='ASC'):
				return ($a[$key] > $b[$key]) ? 1 : -1;
			else:
				return ($a[$key] < $b[$key]) ? 1 : -1;
			endif;
		}; 
		
		if(is_array($this->arr))
		{
			usort($this->arr, $cmp);
		}
		return $this->arr;
	}
}

$n = new itcArraySort($data);

查看结果

print_r($n->doSort('age','ASC'));

/*
Array
(
    [0] => Array
        (
            [name] => Martin
            [key] => bb07c989b57c25fd7e53395c3e118185
            [age] => 18
        )

    [1] => Array
        (
            [name] => Julie
            [key] => 64489c85dc2fe0787b85cd87214b3810
            [age] => 20
        )

    [2] => Array
        (
            [name] => Jessica
            [age] => 25
            [key] => e1a118c9178aa3538f39a9c8131938ed
        )

    [3] => Array
        (
            [name] => Lucy
            [key] => ab3aec6d954571c7551a186ea1cd98ff
            [age] => 100
        )

)
*/