我有一个集合
Collection {#364 ▼
#items: array:2 [▼
24 => Collection {#375 ▼
#items: array:3 [▶]
}
0 => Collection {#376 ▶}
]
}
我尝试转换为数组抓取键并对它们进行排序
dd(sort(array_keys($group_ids->toarray())));
我收到错误只应通过引用传递变量
我需要按升序将此集合转换为键数组。
dd(array_keys($group_ids->toArray()));
似乎给了我需要但我无法转换它。
array:2 [▼
0 => 24
1 => 0
]
答案 0 :(得分:1)
由于PHP sort()函数需要引用而引发Only variables should be passed by reference
错误,它只能是一个变量而不是另一个函数的返回值。要解决此错误,您可以使用如下的中间变量:
$keys = array_keys($group_ids->toArray());
sort($keys);
由于您已经使用了Laravel Collection
,因此您只需使用keys()
和sort()方法即可。假设$group_ids
是Collection
的一个实例,您可以提取密钥并按升序排序:
$sortedKeys = $group_ids->keys()->sort()->toArray();
希望这有帮助!
答案 1 :(得分:0)
以下解决方案可能适合您。
当你致电User::all()
时,你会得到类似的结果:
0 => points: 10
1 => points: 50
2 => points: 30
3 => points: 70
4 => points: 20
你可以做的是使用values()函数,它将重置你的集合的键:
0 => points: 70
1 => points: 50
2 => points: 30
3 => points: 20
4 => points: 10
您可能尝试从值中对数据进行排序。所以关键是自动整理出来。
$users = User::all();
$users = $users->sortByDesc(function($item){
return $item->points()->sum('amount');
})->values();
我不确定这个解决方案,但希望它对您的问题有所帮助。在你的问题中,我没有看到任何查询,所以我对你如何生成这些集合没有多少。
由于