Помогите отсортировать массив php

313
27 июля 2022, 17:40

Помогите пожалуйста с сортировкой. Есть примерно такой массив:

[1]=>
  array(12) {
    ["TEXT"]=>
    string(20) "Полиграфия"
    ["LINK"]=>
    string(22) "/services/poligrafiya/"
    ["CHILDREN"]=>
    array(3) {
      [2]=>
      array(11) {
        ["TEXT"]=>
        string(12) "Газеты"
        ["LINK"]=>
        string(29) "/services/poligrafiya/gazety/"
        ["PARAMS"]=>
        array(4) {
          ["DEPTH_LEVEL"]=>
          int(2)
          ["USORT"]=>
          string(3) "650"
        }
      }
      [3]=>
      array(11) {
        ["TEXT"]=>
        string(12) "Журналы"
        ["LINK"]=>
        string(29) "/services/poligrafiya/jurnal/"
        ["PARAMS"]=>
        array(4) {
          ["DEPTH_LEVEL"]=>
          int(2)
          ["USORT"]=>
          string(3) "620"
        }
      }
[4]=>
      array(11) {
        ["TEXT"]=>
        string(12) "Книги"
        ["LINK"]=>
        string(29) "/services/poligrafiya/book/"
        ["PARAMS"]=>
        array(4) {
          ["DEPTH_LEVEL"]=>
          int(2)
          ["USORT"]=>
          string(3) "690"
        }
      }

Задача - отсортировать все элементы ветки ["CHILDREN"] по полю ["PARAMS"]["USORT"] по возрастанию. Пытаюсь сделать так:

foreach ($aMenuLinksNew as $key => $value)
        {
         
          if(!empty($value["CHILDREN"])) 
           {
               usort($value["CHILDREN"][$key], function($a, $b) {
               if ($a["PARAMS"][USORT] == $b["PARAMS"]["USORT"])
                  return 0;
               return ($a["PARAMS"][USORT] < $b["PARAMS"]["USORT"]) ? -1 : 1;
}
);
               
           }
            
        };

Подскажите, что делаю не так?

Answer 1
$data = [
    ['CHILDREN' => ['PARAMS' => [
        ['USORT' => 9, 'TITLE' => 'NINE'],
        ['USORT' => 8, 'TITLE' => 'EIGHT'],
        ['USORT' => 7, 'TITLE' => 'SEVEN'],
    ]]],
    ['CHILDREN' => ['PARAMS' => [
        ['USORT' => 9, 'TITLE' => 'NINE'],
        ['USORT' => 7, 'TITLE' => 'SEVEN'],
    ]]],
];
foreach ($data as &$row) {
    usort($row['CHILDREN']['PARAMS'], static function($a, $b) {
        return $a['USORT'] <=> $b['USORT'];
    });
}
unset($row);
echo json_encode($data);
READ ALSO
Проблема с базой данных и моделями в asp.net core mvc

Проблема с базой данных и моделями в asp.net core mvc

В моделях у меня находятся 2 модели (User и Song)Связь между моделями один ко многим

212
С# EF Core. Не срабатывает update-database

С# EF Core. Не срабатывает update-database

В ConfitureServices прописал servicesAddDbContext<ModelContext>();

191
Десериализация. При выводе информации из файла выводится только первая запись

Десериализация. При выводе информации из файла выводится только первая запись

Цель: ввести информацию о студентах => записать в файл => вывести из файла(в консоль)

196
Xamarin редактор: что-то пошло не так

Xamarin редактор: что-то пошло не так

Прикрепляю скриншот, так как текст ошибки не копируется

324