Skip to content

Instantly share code, notes, and snippets.

@s2ar
Last active May 23, 2016 09:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s2ar/731d180fa0d8ba77e3290bd9857bb5a7 to your computer and use it in GitHub Desktop.
Save s2ar/731d180fa0d8ba77e3290bd9857bb5a7 to your computer and use it in GitHub Desktop.
Множественная сортировка
<?php
/*
http://wp-kama.ru/question/php-usort-sortirovka-massiva-po-dvum-polyam
* Сортировка массива по двум параметрам с помощью usort()
*/
function _usort_object_by_time_ms($a, $b){
// поля по которым сортировать
$array = array( 'laps'=>'desc', 'time_ms'=>'asc' );
$res = 0;
foreach( $array as $k=>$v ){
if( $a->$k == $b->$k ) continue;
$res = ( $a->$k < $b->$k ) ? -1 : 1;
if( $v=='desc' ) $res= -$res;
break;
}
return $res;
}
//Функция для сортировки массива с объектами
//Функция на основе первого примера, с которой удобно работать.
//Передаете в $array массив объектов (можно массив массивов), указываете в $args параметры сортировки и получаете отсортированный массив объектов.
//Сортировка объектов/массивов находящихся в массиве, по указанным полям.
function sort_nested_arrays( $array, $args = array('votes' => 'desc') ){
usort( $array, function( $a, $b ) use ( $args ){
$res = 0;
$a = (object) $a;
$b = (object) $b;
foreach( $args as $k => $v ){
if( $a->$k == $b->$k ) continue;
$res = ( $a->$k < $b->$k ) ? -1 : 1;
if( $v=='desc' ) $res= -$res;
break;
}
return $res;
} );
return $array;
}
//Нам нужно отсортировать его, сначала по числу в строке, а затем по букве. Делаем так
// сортируем по порядку: числа, потом буквы
usort( $val, function($a,$b){
$res = 0;
// сравниваем числа
$inta=intval($a); $intb=intval($b);
if( $inta != $intb ){
return ( $inta > $intb ) ? 1 : -1;
}
// сравниваем буквы
$var1 = preg_replace('~[0-9]+~', '', $a);
$var2 = preg_replace('~[0-9]+~', '', $b);
$compare = strcmp( $var1, $var2 ); // А считается меньше Б
if( $compare !== 0 ){
return ( $compare > 0 ) ? 1 : -1;
}
return $res;
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment