Ты почти у цели.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
в фоновом режиме, так что вы можете использовать их напрямую, но только с массивом в качестве входных данных.