我有一个很大的文件,其中包含以下格式的库存:
$inventories = {"External Hard Drives":2,"Cables":1,"Disks":10,"Floppy Drives":1,"USB Sticks":5}`
我正在尝试按升序对每个值进行排序。我尝试过:
arsort($inventories)
和array_sort(inventories)
没有成功。有什么帮助吗?我正在Laravel 5.6中工作。
答案 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();