Сортировка многомерного массива PHP
Сначала хотел городить огород с asort(), но после поисков, нашел что разработчики PHP уже давным давно все придумали до нас. Оказывается есть функция array_multisort. Как работает эта функция:
array_multisort( array &$arr [, array &$arr [, array &$arr… ]] )
Грубо говоря каждый массив будет отсортирован в соответствии с предыдущим массивом. Вот пример:
1 2 3 4 5 6 |
//Сортируемый масив $array_main=array('foo','bar','foobar',); //Определяющий массив $array_id=array(3,1,2,); array_multisort($array_id, $array_main); var_dump($array_main); |
Выведет:
array(4) {[0]=> string(3) «bar»[1]=> string(3) «foobar»[2]=> string(3) «foo»}
А это как раз то что нам надо!
Пример сортировки массива по полю year:
1 2 3 4 5 6 |
$data_year=array(); //Генерируем "определяющий" массив foreach($data as $key=>$arr){ $data_year[$key]=$arr['year']; } array_multisort($data_year, SORT_NUMERIC, $data); |
Пример сортировки массива по полям year и author:
1 2 3 4 5 6 7 8 9 |
$data_author=array(); foreach($data as $key=>$arr){ $data_author[$key]=$arr['author']; } $data_year=array(); foreach($data as $key=>$arr){ $data_year[$key]=$arr['year']; } array_multisort($data_year, SORT_NUMERIC, $data_author, $data); |