Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel按键排序对象_Php_Laravel_Sorting - Fatal编程技术网

Php Laravel按键排序对象

Php Laravel按键排序对象,php,laravel,sorting,Php,Laravel,Sorting,我有以下内容,我想按字母顺序排列,即每个数组组的第一个字母是“bname”,然后是“created_at” 我尝试在foreach循环中使用ksort,如下所示: class LeadController extends Controller { use Helpers; public function index(Lead $leads) { $leads = $leads->all(); foreach($leads as $

我有以下内容,我想按字母顺序排列,即每个数组组的第一个字母是“bname”,然后是“created_at”

我尝试在foreach循环中使用ksort,如下所示:

class LeadController extends Controller
{
    use Helpers;

    public function index(Lead $leads)
    {
        $leads = $leads->all();

        foreach($leads as $key => $lead){
            $lead->user = User::where('id', $lead->user_id)->first()->name;
            $lead->source = Source::where('id', $lead->source_id)->first()->name;
            $lead->industry = Industry::where('id', $lead->industry_id)->first()->name;

            $lead->ksort();
        }

        return $leads;
    }
但我得到了以下错误:

Call to undefined method Illuminate\\Database\\Query\\Builder::ksort()
我该如何使用这个函数,或者有没有一个Laravel的方法,或者有一个更好的方法


谢谢。

设法让它按字母顺序返回,因此以下是其他人需要它时的解决方案:

public function index(Lead $leads)
{
    $leadOut = Array();

    $leads = $leads->all();

    foreach($leads as $key => $lead){
        $lead->user = User::where('id', $lead->user_id)->first()->name;
        $lead->source = Source::where('id', $lead->source_id)->first()->name;
        $lead->industry = Industry::where('id', $lead->industry_id)->first()->name;

        //Convert to Array
        $leadOrder = $lead->toArray();
        //Sort as desired
        ksort($leadOrder);
        //Add to array
        $leadOut[] = $leadOrder;
    }

    return $leadOut;
}

可能有一种更干净的方法可以做到这一点,但它适用于我的实例,并且可能会发布更好的其他答案。

您可以这样做:

return Lead::with('user', 'source', 'industry')->get()->map(function ($lead) {

        $item = $lead->toArray();

        $item['user'] = $lead->user->name;
        $item['source'] = $lead->source->name;
        $item['industry'] = $lead->industry->name;

        ksort($item);

        return $item;
    });

这应该更有效,因为它将急切地加载关系,而不是为每个迭代进行3次额外的查询。

1)按什么“键”?2) 这些数据来自哪里?什么是
$lead
?它是如何赋值的?@Phil请参见编辑并澄清对象键的顺序不应对数据结构产生任何影响。这有什么关系?就个人而言,我不在乎它们的顺序,因为我可以按名字称呼它们,但我被要求按字母顺序输出它们。显然,
$leads->all()
正在返回
illighte\Database\Query\Builder
对象的集合,而您似乎希望它们是使用
ksort
方法的其他对象。您可能应该弄清楚为什么会出现这种情况。我得到错误:“isset或empty中的非法偏移量类型”@SeánMcCabe您使用的是什么版本的PHP,以及您使用的是什么版本的Laravel?5.6.31和5.4。我现在已经使用分形解决了整个问题,允许我按照请求的顺序输出内容,并更改名称以确保安全。控制器现在只有两行$leads=Lead::with('user','source','industry','status')->get();返回分形($leads,new leadstransformer())->respond();
return Lead::with('user', 'source', 'industry')->get()->map(function ($lead) {

        $item = $lead->toArray();

        $item['user'] = $lead->user->name;
        $item['source'] = $lead->source->name;
        $item['industry'] = $lead->industry->name;

        ksort($item);

        return $item;
    });