kolyash
@kolyash
Сам себе на уме :)

Не могу сортиронуть в PHP?

Привет! Изучаю php и уже мозг сломал, не могу понять как реализовать.
В общем это меню из массива которое сортируется по ключу "sort", вверху на странице меню сортировать надо по возрастанию, внизу по убыванию... В функцию myMenu добавил параметр направление сортировки $waysort, который думаю надо передавать по ссылке...
параметр $sort = 'asc' (или 'desc') - это направление сортировки. На основе этого значения надо менять результат внутри callback-функции передаваемой вторым параметром usort(), если 'desc' - то сортируете по убыванию, в другом случае по возрастанию. А как это реализовать я что-то в ступоре...
Просьба помочь и расписать, что к чему для понимания.... :)

<?php

$mymenu = [
	array('title' => "Ауди", 'auto' => "/audi/", 'sort' => "2"),
	array('title' => "БМВ", 'auto' => "/bmw/", 'sort' => "3"),
    array('title' => "Опель", 'auto' => "/opel/", 'sort' => "1"),
	array('title' => "Лада", 'auto' => "/lada/", 'sort' => "4"),
];

function myMenu($mymenu, &$waysort)
{
    return require($_SERVER['DOCUMENT_ROOT'] . '/menu.php');
}

function array_sort(array $mymenu, $key = 'sort', $sort = 'asc')
{
	// ...???
}
  • Вопрос задан
  • 749 просмотров
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F
На основе этого значения надо менять результат внутри callback-функции передаваемой вторым параметром usort()

Умножайте результат на +/- 1, в зависимости от переданного значения:

function array_sort(array &$arr, $key, $sort = 'asc') {
  $sort = $sort === 'asc' ? 1 : -1;
  usort($arr, function($a, $b) use($sort, $key) {
    $a = $a[$key];
    $b = $b[$key];
    return $sort * ($a === $b ? 0 : $a > $b ? 1 : -1);
  });
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы