Как сортировать по параметрам ассоциативного массива.

August 20, 2014

Возника задача сортировки ассоциативного массива по определенному параметру.
Например, есть массив с товарами, а нужно отсортировать массив по цене или по названию товара.

Это можно сделать следующими функциями:

function sort_params(&$t, $sortBy, $sortDir) {
foreach($t as &$v) {
$v['__________1'] = $sortBy;
$v['__________2'] = $sortDir;
}
usort($t, 'cmp');
foreach($t as &$v) {
unset($v['__________1']);
unset($v['__________2']);
}
}

//Сортировка
function cmp($a, $b)
{
// Если поле сортировки не задано сортируем по цене
$sortBy = $a['__________1'];
if ($sortBy != '') {
$at = $a[$sortBy];
$bt = $b[$sortBy];
} else {
$at = isset($a['price1']) ? $a['price1'] : $a['price2'];
$at = intval($at);
$bt = isset($b['price1']) ? $b['price1'] : $b['price2'];
$bt = intval($bt);
}
if ($at == $bt) {
return 0;
}
//По умолчанию сортируем ASC
$sortDir = $a['__________2'];
if ($sortDir == 'ASC') {
return ($at < $bt) ? -1 : 1;
} else {
return ($at < $bt) ? 1 : -1;
}
}

//Использование
$massiv = array();
//Сортируем массив по цене в порядке увеличения
sort_params($massiv, 'price', 'ASC');

Комментарии

comments powered by Disqus