@voredev

Сортировка меню с помощью php?

Прохожу обучение дошел до пользовательских функций и тут настиг такой вопрос:
1. сортировка вывода разделов должна быть от меньшего к большему. Все пункты меню должны быть ссылками на разделы со стилем text-decoration:none;
2. в подвале сортировка вывода разделов от большего к меньшему Все пункты меню должны быть ссылками на разделы со стилем text-decoration:none;

Изначально я решил эту проблему вот так
Функция:

// Меню по убыванию:
function out_function($a, $b){
    return ($a['sort'] < $b['sort']);
}

// Меню по возрастанию:
function in_function($a, $b){
    return ($a['sort'] > $b['sort']);
}


Само меню

uasort($menu, 'in_function');

foreach ($menu as $value): ?>
    <? $class_active = strpos($_SERVER["REQUEST_URI"], $value['path']) !== false ? " class='active'" : '';?>
    <a <?= $class_active ?> href='<?= $value['path'] ?>'> <?= $value['title'] ?></a>
<?php endforeach; ?>


Массив $menu

$menu = [

    ['title' => "О нас", 'path' => "/route/about/", 'sort' => 2],
    ['title' => "Главная", 'path' => "../../index.php", 'sort' => 1],
    ['title' => "Проекты", 'path' => "/route/project/", 'sort' => 3],
    ['title' => "Галерея", 'path' => "/route/gallery/", 'sort' => 4],
    ['title' => "Карта", 'path' => "/route/map/", 'sort' => 5],
    ['title' => "Контакты", 'path' => "/route/contact/", 'sort' => 6]
];


Код работал но в итоге все равно меня попросили исправить

1) Вместо двух функций меню по убыванию и меню по возрастанию создайте одну и используйте формальный параметр, отвечающий за сортировку

В итоге я сделал так, но сортировка не происходит в чем может быть проблема
function printMenu($menu, $sort)
{
    include_once $_SERVER['DOCUMENT_ROOT'] . '/include/main_menu.php';  //подключение массива $menu
};

function array_sort($menu, $key = 'sort', $sort = SORT_ASC)
{
    usort( $menu, function($a, $b) use ($key, $sort) {
        $a = $a[$key];
        $b = $b[$key];
        $sort = printMenu($sort) == SORT_ASC ? 1 : -1;
        return $sort * ($a <=> $b ? 0 : $a > $b ? 1 : -1);
    });
};


foreach ($menu as $value): ?>
    <? $class_active = strpos($_SERVER["REQUEST_URI"], $value['path']) !== false ? " class='active'" : '';?>
    <a <?= $class_active ?> href='<?= $value['path'] ?>'> <?= $value['title'] ?></a>
<?php endforeach; ?>
  • Вопрос задан
  • 665 просмотров
Пригласить эксперта
Ответы на вопрос 1
EGORR
@EGORR
Freelance
В первую очередь вам нужно работая с PHP кодом забыть про HTML выхлоп.
Не смешивайте серверную и клиентскую стороны.
Задача состоит из правильной сортировки массивов. И неважно какой HTML код из них будет формироваться. А для сортировки массивов в PHP множество функций и они решат все ваши запросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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