Search code examples
phplaravelcollectionsusort

Sorting laravel collection by leaving null/empty last


Can't seem to get my head around of sorting laravel collection so empty / null data would end up being last. ( bit confused about usort )

Pretty much all I have is bunch of times / timestamps that need to be ordered. Some rows may not have for that column.

I would like data to appear ASC / ascending while empty/null data is shown last.

$collection->sortBy('timestamp') sorts nicely but doesn't know how to deal with empty fields.

data

Table looks like this.

   $data = $data->sort(function($a, $b) use ($sortBy) {
        if ($a->{$sortBy} and $b->{$sortBy}) return 0; 
        return ($a->{$sortBy} > $b->{$sortBy}) ? -1 : 1;
    }); 

Random code I tried from the internet, which I can't get to work correctly. $sortBy contains a field name to sort by ( since it may change ) Faulty code deals with empty / null data but its out of order. faulty


Solution

  • Try:

    $collection->sortBy('-timestamp')

    Does it work?