Collection::sortBy PHP Method

sortBy() public method

Sorts the collection by any number of fields
public sortBy ( ) : Collection
return Collection
    public function sortBy()
    {
        $args = func_get_args();
        $collection = clone $this;
        $array = $collection->data;
        $params = array();
        if (empty($array)) {
            return $collection;
        }
        foreach ($args as $i => $param) {
            if (is_string($param)) {
                if (strtolower($param) === 'desc') {
                    ${"param_{$i}"} = SORT_DESC;
                } else {
                    if (strtolower($param) === 'asc') {
                        ${"param_{$i}"} = SORT_ASC;
                    } else {
                        ${"param_{$i}"} = array();
                        foreach ($array as $index => $row) {
                            ${"param_{$i}"}[$index] = str::ascii(is_array($row) ? str::lower($row[$param]) : str::lower($row->{$param}()));
                        }
                    }
                }
            } else {
                ${"param_{$i}"} = $args[$i];
            }
            $params[] =& ${"param_{$i}"};
        }
        $params[] =& $array;
        call_user_func_array('array_multisort', $params);
        $collection->data = $array;
        return $collection;
    }

Usage Example

 public function getIncompleteProductLoads($user_id)
 {
     //get user and in progress product requests / ideas
     $user = $this->eloquent->with(['ideas' => function ($query) {
         $query->where('is_fulfilled', '=', 0);
     }])->with(['productRequests' => function ($query) {
         $query->whereNull('product_id');
     }])->find($user_id);
     if (empty($user)) {
         return [];
     }
     $user = $user->toArray();
     $product_requests = $user['product_requests'];
     $ideas = $user['ideas'];
     //compile inprogress items
     $inprogress_items = new \Collection();
     foreach ($product_requests as $product_request) {
         $inprogress_items->add(['type' => 'id load', 'human_time_diff' => \Carbon::createFromFormat('Y-m-d H:i:s', $product_request['created_at'])->diffForHumans(), 'created_at' => $product_request['created_at'], 'updated_at' => $product_request['updated_at'], 'id' => $product_request['id'], 'description' => $product_request['vendor'] . ' ' . $product_request['vendor_id'], 'query' => ['vendor' => $product_request['vendor'], 'vendor_id' => $product_request['vendor_id']]]);
     }
     foreach ($ideas as $idea) {
         $inprogress_items->add(['type' => 'idea load', 'human_time_diff' => \Carbon::createFromFormat('Y-m-d H:i:s', $idea['created_at'])->diffForHumans(), 'created_at' => $idea['created_at'], 'updated_at' => $idea['updated_at'], 'id' => $idea['id'], 'description' => $idea['description'], 'query' => ['idea_description' => $idea['description']]]);
     }
     $inprogress_items->sortBy('created_at');
     return $inprogress_items->toArray();
 }