[英]How can I sort object on laravel?
我的對象數組($ 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
)
)
我想按id排序
如果在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>';
有用
但是如何使用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;
}
這是行不通的
存在這樣的錯誤:
未定義的屬性... $ sortById ...
我該如何解決?
不要重新發明輪子。 Laravel是一個很棒的框架,已經為你做了很多工作。
首先,您需要將數組轉換為Collection:
$c = collect($c);
現在,對於使用集合,您可以使用一組很好的可用方法 。 在您的情況下,您需要sortBy() :
$sorted = $c->sortBy('id');
或者,您可以傳遞回調:
$sorted = $c->sortBy(function ($item, $key) {
return $item->id;
});
這兩個都將返回一個Collection對象。 如果你想改回一個數組,請在結果上使用all()
或toArray()
:
$c = $c->all();
// or
$c = $c->toArray();
嘗試這個
public function add($param)
{
...
usort($c, function($a, $b){
if($a->id == $b->id) {
return 0 ;
}
return ($a->id < $b->id) ? -1 : 1;
});
echo '<pre>';print_r($c);echo '</pre>';die();
...
}
您不需要使用不同的sortById
方法
如果你想要一個純粹的PHP方式:
在第一種情況下,您嘗試將過程函數作為回調傳遞給您的usort
函數。
如果要將類中的方法作為回調傳遞,則需要按如下方式傳遞:
usort($c, [$this, 'sortById']);
查看來自usort
手冊頁的第三個示例。
請注意,只要您在類中,就可以使用$this
變量。 例如,如果要使用其他類的上下文,則需要按如下方式傳遞實例:
$object = new someClass;
usort($c, [$object, 'sortById']);
如果您需要傳遞靜態方法,也可以按如下方式傳遞:
usort($c, ['someClass', 'sortById']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.