Last active
May 23, 2016 09:24
-
-
Save s2ar/731d180fa0d8ba77e3290bd9857bb5a7 to your computer and use it in GitHub Desktop.
Множественная сортировка
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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