Сортировка многомерного массива дает неправильный первый элемент (начиная с P, а не с A)

0

Мне помогли сортировать мой многомерный массив, используя следующий код

<?php
    $guildname = str_replace(" ", "_", "Mutiny");
    $url = 'http://eu.battle.net/api/wow/guild/frostmane/'.$guildname.'?fields=members';
    $content = file_get_contents($url);
    $json = json_decode($content, true);

    array_multisort($json["members"], SORT_ASC);

    foreach($json["members"] as $item) 
    {                           
        echo 
        "<tr>
            <td>" . $item['character']['name'] . "</td>
            <td>" . $item['character']['class'] . "</td>
            <td>" . $item['rank'] . "</td>
        </tr>"
        ;
    }
?>      

Теперь странно, что мой массив сортируется правильно, за исключением первого элемента. Проверьте это изображение или приведенный ниже список в качестве примера:

  • Petterslayer
  • Albatra
  • Arrathas
  • Bengta
  • Булочки
  • ...

Добавление SORT_STRING не работает и дает ошибку.

  • 0
    Есть ли невидимый персонаж перед Petterslayer, который может быть причиной его сортировки в первую очередь?
  • 0
    Это API: eu.battle.net/api/wow/guild/frostmane/Mutiny?fields=members А это неверный игрок в моем отсортированном списке: {"персонаж": {"имя": "Петтерслой", " realm ":" Frostmane "," battlegroup ":" Misery "... Насколько я могу судить, нет невидимых персонажей?
Показать ещё 1 комментарий
Теги:

2 ответа

1
<?php
$json = file_get_contents ('https://eu.api.battle.net/wow/guild/Frostmane/Mutiny?fields=members&locale=en_GB&apikey=*');
$data = json_decode ($json, true);

$entries = $data['members'];

usort ($entries, 'sortByName');

var_dump ($entries);

function sortByName ($entry1, $entry2)
{
        $name1 = $entry1['character']['name'];
        $name2 = $entry2['character']['name'];

        return ord ($name1) - ord ($name2);
}
?>
  • 0
    Я не мог заставить этот URL работать, но используя исходный URL OPs, этот код работает.
  • 0
    Обратите внимание на OP, кажется, что поскольку в записи для Petterslayer отсутствовала часть spec массива, она сортировалась первой. Независимо от этого, массив имел больше измерений, которые не учитывала функция сортировки, а именно character а не name .
Показать ещё 1 комментарий
0

Вы можете использовать array_multisort() следующим образом:

$array = array
(
[Baritone Horn] => Array
    (
        [0] => Array
            (
                [Name] => Baritone Maintenance
                [Order] => 12
                [CategoryID] => 13849839018
            )

        [1] => Array
            (
                [Name] => Baritone Mouthpieces
                [Order] => 13
                [CategoryID] => 13850963018
            )

        [2] => Array
            (
                [Name] => Accessories
                [Order] => 11
                [CategoryID] => 13850964018
            )

    ) 

[Alpen Horn] => Array
    (
        [0] => Array
            (
                [Name] => Baritone Maintenance
                [Order] => 12
                [CategoryID] => 13849839018
            )

        [1] => Array
            (
                [Name] => Baritone Mouthpieces
                [Order] => 13
                [CategoryID] => 13850963018
            )

        [2] => Array
            (
                [Name] => Accessories
                [Order] => 11
                [CategoryID] => 13850964018
            )

    ) 
)

array_multisort($array);
  • 0
    Таким образом, фактически изменив мой код на «$ json = array_multisort ($ json);» придется работать? Я пытаюсь, но это не сортирует мой массив. Вам не нужно указывать объект, по которому вы хотите отсортировать? Если я 'print_r ($ json)', он просто выводит '1'
  • 0
    Да, теоретически, подробнее об этом можно прочитать здесь: php.net/manual/en/function.array-multisort.php
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню