Сортировка многомерного массива в PHP по заданному значению

#php #arrays #sorting #optimization #multidimensional-array

Вопрос:

У меня есть следующая структура:

 {
"data": {
    "array_1": [
        {
            "name": "Robert Kalani"
        },
        {
            "name": "Balkan Boy",
        }
    ],
    "array_2": [
        {
            "name": "Pepe Dolan"
        },
        {
            "name": "John Nolan",
        }
    ],
    "array_3": [
        {
            "name": "Phillip A. Luna",
        },
        {
            "name": "Eugene Garcia"
        }
    ]
}
 

}

Я хотел бы отсортировать каждый массив по ключу имени в алфавитном порядке, не уверен, как это сделать, я читал об array_multisort, но, похоже, это не сработало. Был бы очень признателен за некоторую помощь

Вот ожидаемый результат

 {
"data": {
    "array_1": [
        {
            "name": "Balkan Boy",
        },
        {
            "name": "Robert Kalani"
        }
    ],
    "array_2": [
        {
            "name": "John Nolan"
        },
        {
            "name": "Pepe Dolan"
        }
    ],
    "array_3": [
        {
            "name": "Eugene Garcia"
        },
        {
            "name": "Phillip A. Luna"
        }
    ]
}
 

}

Комментарии:

1. не могли бы вы, пожалуйста, показать нам вашу ожидаемую структуру выходного массива?

2. @biswajitbis только что добавил его, спасибо 🙂

3. находятся ли ваши данные в структуре JSON?

4. @biswajitbis был да 🙂

Ответ №1:

 // Your JSON Data
  $data = '{
"data": {
  "array_1": [{ "name": "Robert Kalani" }, { "name": "Balkan Boy" }],
  "array_2": [{ "name": "Pepe Dolan" }, { "name": "John Nolan" }],
  "array_3": [{ "name": "Phillip A. Luna" }, { "name": "Eugene Garcia" }]
}
}
';

  $result = [];

  // Convert your JSON data to associative array
  $array = json_decode($data, true)['data'];


  function sort_by_name($a, $b)
  {
    return $a > $b;
  }

  foreach ($array as $item) {
    uasort($item, "sort_by_name");
    $result[] = $item;
  }


  echo "<pre>";
  print_r($result);
 

Результат:

 Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [name] => Balkan Boy
                )

            [0] => Array
                (
                    [name] => Robert Kalani
                )

        )

    [1] => Array
        (
            [1] => Array
                (
                    [name] => John Nolan
                )

            [0] => Array
                (
                    [name] => Pepe Dolan
                )

        )

    [2] => Array
        (
            [1] => Array
                (
                    [name] => Eugene Garcia
                )

            [0] => Array
                (
                    [name] => Phillip A. Luna
                )

        )

)