Home »
PHP »
PHP кастомная сортировка
Пример кастомной сложной сортировки по множеству параметров
function location_sort($a,$b){
$in_a = $in_b = $up = 0;
$status_arr = array('свободен' => 0, 'резерв' => 0,'забронировано' => 0,'продано' => 1);
$a->content_status = trim($a->content_status);
$b->content_status = trim($b->content_status);
// Проверка на неопределенный статус
$in_a = empty($status_arr[$a->content_status]) ? '1' : '0';
$in_b = empty($status_arr[$b->content_status]) ? '1' : '0';
if($in_a != $in_b) return $in_b - $in_a;
// Проверка на сортировку по статусу из массива $status_arr
$in_a = $status_arr[$a->content_status] < $status_arr[$b->content_status] ? '1' : '0';
$in_b = $status_arr[$a->content_status] > $status_arr[$b->content_status] ? '1' : '0';
if($in_a != $in_b) return $in_b - $in_a;
// Проверка на Москву
$in_a = mb_strtoupper(trim($a->content_nalichie)) == 'МОСКВА' ? '1' : '0';
$in_b = mb_strtoupper(trim($b->content_nalichie)) == 'МОСКВА' ? '1' : '0';
if($in_a != $in_b) return $in_b - $in_a;
// Проверка на числовые данные в городе
$in_a = ereg("[0-9]+",$a->content_nalichie,$reg) ? '0' : '1';
$in_b = ereg("[0-9]+",$b->content_nalichie,$reg) ? '0' : '1';
if($in_a != $in_b) return $in_b - $in_a;
// Проверка на город по алфавиту
$up = strncmp(mb_strtoupper($a->content_nalichie),mb_strtoupper($b->content_nalichie),5);
if($up != 0) return $up;
/*$location_arr = array("Ивантеевка","Москва","Волоколамское");
foreach($location_arr as $e){
if(!$in_a && strpos(mb_strtoupper($a->content_nalichie),mb_strtoupper($e)) !== false){
$in_a = 1;
}
if(!$in_b && strpos(mb_strtoupper($b->content_nalichie),mb_strtoupper($e)) !== false){
$in_b = 1;
}
}*/
//$up = $in_b - $in_a;
//:echo mb_strtoupper($a->content_nalichie).' '.($up);
return 0;
}
usort($list_contents,'location_sort');
Свежие комментарии