Сортировка
многомерного массива по значениям
Частенько требуется отсортировать многомерный массив по его значениям. Следующую функцию я давно нарыл в интеренете и немного переписал под свои нужды ( чтобы можно было встроить в любой класс ).
Таким образом можно обрабатывать данные приходящие к нам из любой базы данных. Пример можно просто скопировать и пообновлять страницу, все работает!
Функция сортирует по имени, группируя сходные значения, если необходимо сортировать по величине числа, достаточно немного переписать array_sort_func().
<?php class func { public function array_sort_func( $a, $b=NULL ) { static $keys; if( $b === NULL ) return $keys = $a; foreach( $keys as $k ) { if( @$k[0] == '!') { // @ - ставим что бы не вылезали ошибки в хедере ( а могут быть ) $k = substr( $k,1 ); if( @$a[$k] !== @$b[$k] ) { return strcmp( @$b[$k], @$a[$k] ); } } else if ( @$a[$k] !== @$b[$k] ) { return strcmp( @$a[$k], @$b[$k] ); } } return 0; } public function array_sort( &$array ) { // & - значит что мы сразу же изменяем активный массив if( !$array ) return $keys; $keys = func_get_args(); // получаем массив сортировки - тоесть полей сортировки может быть несколько array_shift( $keys ); $this->array_sort_func( $keys ); usort( $array, array( $this, 'array_sort_func' ) ); return $array; } } $sort = new func; // быстро создадим массив для тестов $groups = array( 'ololo', 'brushes', 'bread', 'product' ); $array = array(); for( $x = 0; $x < 10; $x++ ) { $array[] = array( 'id' => rand( 1,9 ), 'group' => $groups[array_rand( $groups, 1 )], 'group2' => $groups[array_rand( $groups, 1 )] ); } /* тестируем функцию */ $sort->array_sort( $array, 'group' ); // по алфавиту echo '<pre>'; print_r( $array ); echo '<hr />'; $sort->array_sort( $array, '!group', 'group2' ); // первый параметр алфавит наоборот и второй по алфавиту echo '<pre>'; print_r( $array );