Сортировка пар ключ-значение в Laravel - PullRequest
1 голос
/ 27 марта 2019

У меня есть большой файл, содержащий запасы в этом формате:

$inventories = {"External Hard Drives":2,"Cables":1,"Disks":10,"Floppy Drives":1,"USB Sticks":5}`

Я пытаюсь отсортировать их по значению каждого в порядке возрастания.Я пытался:

arsort($inventories) и array_sort(inventories) без успеха.Любая помощь, пожалуйста?Я работаю в Laravel 5.6.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Ты почти у цели.array_sort не поддерживает объект, но массив.

$inventories = '{"External Hard Drives":2,"Cables":1,"Disks":10,"Floppy Drives":1,"USB Sticks":5}';

Теперь декодируйте его со вторым параметром true для преобразования в ассоциативный массив.

$inventories = json_decode($inventories, true); // now you have array

Тогда вы можете сделать это своимпо-своему:

$inventories = array_sort($inventories); // this works

Или используйте подход Коллекции Laravel (https://laravel.com/docs/5.6/collections#method-sort), который преобразует автоматически для вас:

$inventories = collect($inventories);
$inventories = $inventories->sort();

echo json_encode($inventories); выведет:

{
    Cables: 1,
    Floppy Drives: 1,
    External Hard Drives: 2,
    USB Sticks: 5,
    Disks: 10
}

Необычное сравнение с 2 значениями:

$inventories = $inventories->sort(function($v1, $v2) {
    return $v2 > $v1;
});

Это будет печатать в обратном порядке:

{
    Disks: 10,
    USB Sticks: 5,
    External Hard Drives: 2,
    Cables: 1,
    Floppy Drives: 1
}

Сортировка Laravel использует uasort в фоновом режиме, так что вы можете использовать их напрямую, но только с массивом в качестве входных данных.

0 голосов
/ 27 марта 2019

Как только вы прочитаете свой файл, вы можете сделать что-то вроде

$inventories = '{"External Hard Drives":2,"Cables":1,"Disks":10,"Floppy Drives":1,"USB Sticks":5}';

collect(json_decode($inventories))->sort();

выход

=> Illuminate\Support\Collection {#2968
     all: [
       "Cables" => 1,
       "Floppy Drives" => 1,
       "External Hard Drives" => 2,
       "USB Sticks" => 5,
       "Disks" => 10,
     ],
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...