#php #массивы #функции #сортировка
есть массив $menu = [ 'tasks' => [ 'title' => 'Задачи', 'path' => '/route/tasks/', 'sort' => 3 ], 'obj' => [ 'title' => 'Цели', 'path' => '/route/obj/', 'sort' => 2 ], 'index' => [ 'title' => 'Главная', 'path' => '/route/index/', 'sort' => 1 ], 'message' => [ 'title' => 'Сообщения и предложения', 'path' => '/route/message/', 'sort' => 5 ], 'friends' => [ 'title' => 'Друзья', 'path' => '/route/friends/', 'sort' => 4 ] ]; нужно отсортировать его по ключу 'sort'. через функцию usort сортируется как надо: $key = 'sort'; $sort = 'desc'; usort($menu, function ($a, $b) use ($key, $sort) { if ($sort == 'asc') { if ($a[$key] == $b[$key]) { return 0; } return ($a[$key] > $b[$key]) ? 1 : -1; } if ($sort == 'desc') { if ($a[$key] == $b[$key]) { return 0; } return ($a[$key] > $b[$key]) ? -1 : 1; } }); echo ''; var_dump($menu); вывод: array(5) { [0]=> array(3) { ["title"]=> string(44) "Сообщения и предложения" ["path"]=> string(15) "/route/message/" ["sort"]=> int(5) } [1]=> array(3) { ["title"]=> string(12) "Друзья" ["path"]=> string(15) "/route/friends/" ["sort"]=> int(4) } [2]=> array(3) { ["title"]=> string(12) "Задачи" ["path"]=> string(13) "/route/tasks/" ["sort"]=> int(3) } [3]=> array(3) { ["title"]=> string(8) "Цели" ["path"]=> string(11) "/route/obj/" ["sort"]=> int(2) } [4]=> array(3) { ["title"]=> string(14) "Главная" ["path"]=> string(13) "/route/index/" ["sort"]=> int(1) } } делаю функцию, чтобы принимать значение $array, $key, $sort: function array_sort($array, $key, $sort) { return usort($array, function($a, $b) use ($key, $sort) { if ($sort == 'asc') { if ($a[$key] == $b[$key]) { return 0; } return ($a[$key] > $b[$key]) ? 1 : -1; } if ($sort == "desc") { if ($a[$key] == $b[$key]) { return 0; } return ($a[$key] > $b[$key]) ? -1 : 1; } }); } array_sort($menu, $key = 'sort', $sort = 'asc'); echo ''; var_dump($menu); вывод: array(5) { ["tasks"]=> array(3) { ["title"]=> string(12) "Задачи" ["path"]=> string(13) "/route/tasks/" ["sort"]=> int(3) } ["obj"]=> array(3) { ["title"]=> string(8) "Цели" ["path"]=> string(11) "/route/obj/" ["sort"]=> int(2) } ["index"]=> array(3) { ["title"]=> string(14) "Главная" ["path"]=> string(13) "/route/index/" ["sort"]=> int(1) } ["message"]=> array(3) { ["title"]=> string(44) "Сообщения и предложения" ["path"]=> string(15) "/route/message/" ["sort"]=> int(5) } ["friends"]=> array(3) { ["title"]=> string(12) "Друзья" ["path"]=> string(15) "/route/friends/" ["sort"]=> int(4) } } подскажите пожалуйста, почему не работает функция, в чем я допустил ошибку?Ответы
Ответ 1
Вы передаете в свою функцию массив по значению, а не по ссылке. В итоге функция array_sort принимает копию исходного массива и сортирует ее не трогая оригинальный массив. Измените объявление функции на function array_sort(&$array, $key, $sort) { ^^^ и все будет работать
Комментариев нет:
Отправить комментарий