Я пытаюсь создать многосортный метод. Следующее работает, но я не знаю, как передать array_multisort
переменные для SORT_DESC
, SORT_ASC
и т. Д. В качестве переменных, поэтому мне пришлось использовать оператор if
ниже. Кто-нибудь знает, как это сделать правильно? Я использую PHP 5.6.
Пример:
twoColumnMultiSort($test, 'model', 'year','desc','asc');
Функция:
function twoColumnMultiSort(&$arr, $sort1 = '', $sort2 = '', $sort1_type = 'asc', $sort2_type = 'asc')
{
foreach ($arr as $key => $row) {
$arr_sort1[$key] = $row[$sort1];
$arr_sort2[$key] = $row[$sort2];
}
$sort1_type = strtolower($sort1_type);
$sort2_type = strtolower($sort2_type);
if ($sort1_type == 'asc' && $sort2_type == 'asc') {
array_multisort($arr_sort1, SORT_ASC, $arr_sort2, SORT_ASC, $arr);
} else if ($sort1_type == 'asc' && $sort2_type == 'desc') {
array_multisort($arr_sort1, SORT_ASC, $arr_sort2, SORT_DESC, $arr);
} else if ($sort1_type == 'desc' && $sort2_type == 'asc') {
array_multisort($arr_sort1, SORT_DESC, $arr_sort2, SORT_ASC, $arr);
} else if ($sort1_type == 'desc' && $sort2_type == 'desc') {
array_multisort($arr_sort1, SORT_DESC, $arr_sort2, SORT_DESC, $arr);
}
array_multisort($arr_sort1, SORT_ASC, $arr_sort2, SORT_ASC, $arr);
return $arr;
}
тест:
$test = array(
0 => array (
'id' => 1,
'model' => 'cayman',
'year' => '2018',
'order' => 6,
),
1 =>
array (
'id' => 6,
'model' => '911',
'year' => '2012',
'order' => 3,
),
2 =>
array (
'id' => 3,
'model' => 'macan',
'year' => '2010',
'order' => 1,
),
3 =>
array (
'id' => 5,
'model' => 'cayman',
'year' => '1999',
'order' => 3,
),
4 =>
array (
'id' => 4,
'model' => 'cayman',
'year' => '2016',
'order' => 2,
),
);
Требуемый проход изменения в сортировке как переменные напрямую:
$sort1_type = "SORT_DESC";
$sort2_type = "SORT_ASC";
twoColumnMultiSort($test, 'model', 'year',$sort1_type,$sort2_type);
и, следовательно, удалите оператор if в методе.