在Laravel中对键值对进行排序

时间:2019-03-27 02:56:51

标签: php arrays laravel sorting

我有一个很大的文件,其中包含以下格式的库存:

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

我正在尝试按升序对每个值进行排序。我尝试过:

arsort($inventories)array_sort(inventories)没有成功。有什么帮助吗?我正在Laravel 5.6中工作。

2 个答案:

答案 0 :(得分:1)

您快到了。 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,因此您也可以直接使用它们,但只能将数组作为输入。

答案 1 :(得分:0)

阅读文件后,您可以执行类似的操作

nums

输出

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

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