ГлавнаяБлогКласс для сортировки массива, usort [php]

Класс для сортировки массива, usort [php]

Рамиль Юналиев
Рамиль Юналиев
E-Commerce Lead
8 мая 2010 г.
1 мин чтения

Пример реализации выборки из нескольких инфоблоков с постраничной навигацией и сортировкой.

Задачи

  • Выбрать список элементов из нескольких инфоблоков в таблицу
  • Иметь возможность сортировки элементов
  • Реализовать постраничную навигацию

Подход работает при небольшом количестве выбираемых элементов — максимум до 100, естественно с кэшированием.

Использование

Применяем класс для сортировки перед пагинацией:

usort($arResult['ITEAM'], array("CCabinet_SortObject", "cmp_".$arParams['SORT_BY']."_".$arParams['SORT_ORDER']));

Класс CCabinet_SortObject

class CCabinet_SortObject {
 
	function __cmp_ValueOf($a, $b, $name, $order) {
		if(is_set($a[$name]) && is_set($b[$name])) {
			if($order == 'ASC')
				return ($a[$name]<$b[$name])?true:false;
			elseif($order == 'DESC')
				return ($b[$name]>$a[$name])?false:true;
		}
	}
 
	function cmp_STATUS_ASC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "STATUS", "ASC");
	}
 
	function cmp_STATUS_DESC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "STATUS", "DESC");
	}
 
	function cmp_NAME_ASC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "OBJECT_NAME", "ASC");
	}
 
	function cmp_NAME_DESC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "OBJECT_NAME", "DESC");
	}
 
	function cmp_CITY_ASC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "CITY_NAME", "ASC");
	}
 
	function cmp_CITY_DESC($a, $b) {
		return CCabinet_SortObject::__cmp_ValueOf($a, $b, "CITY_NAME", "DESC");
	}
 
	function cmp_DATE_DESC($a, $b) {
		if ($a["DATE_CREATE"] == $b["DATE_CREATE"]) {
        	return 0;
	    }
	    return ($a["DATE_CREATE"] > $b["DATE_CREATE"]) ? -1 : 1;
	}
 
	function cmp_DATE_ASC($a, $b) {
		if ($a["DATE_CREATE"] == $b["DATE_CREATE"]) {
        	return 0;
	    }
	    return ($a["DATE_CREATE"] < $b["DATE_CREATE"]) ? -1 : 1;
	}
}