簡體   English   中英

如何在laravel上對物體進行排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM