Suc*_*Man 3 php sorting laravel laravel-5.3
我的对象数组($ c)像这样:
Array
(
[0] => stdClass Object
(
[id] => 3
[name] => chelsea.png
)
[1] => stdClass Object
(
[id] => 4
[name] => arsenal.png
)
[2] => stdClass Object
(
[id] => 5
[name] => mu.png
)
[3] => stdClass Object
(
[id] => 1
[name] => city.png
)
)
Run Code Online (Sandbox Code Playgroud)
我想按编号排序
如果在PHP正常我尝试这样:
function sort_by_id( $a, $b )
{
if( $a->id == $b->id ){ return 0 ; }
return ($a->id < $b->id) ? -1 : 1;
}
usort($c,'sort_by_id');
echo '<pre>';print_r($c);echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
有用
但是如何使用laravel来实现呢?
我这样尝试:
public function add($param)
{
...
usort($c, $this->sortById());
echo '<pre>';print_r($c);echo '</pre>';die();
...
}
private function sortById($a, $b)
{
if($a->id == $b->id) {
return 0 ;
}
return ($a->id < $b->id) ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的
存在这样的错误:
未定义的属性... $ sortById ...
我该如何解决?
不要重新发明轮子。Laravel是一个出色的框架,已经为您完成了很多工作。
首先,您需要将数组转换为Collection:
$c = collect($c);
Run Code Online (Sandbox Code Playgroud)
现在,对于使用集合,您可以使用一组不错的可用方法。在您的情况下,您需要sortBy():
$sorted = $c->sortBy('id');
Run Code Online (Sandbox Code Playgroud)
另外,您可以传递一个回调:
$sorted = $c->sortBy(function ($item, $key) {
return $item->id;
});
Run Code Online (Sandbox Code Playgroud)
这两个都将返回Collection对象。如果您想取回数组,请在结果上使用all()或toArray():
$c = $c->all();
// or
$c = $c->toArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |