sortBy返回对象而不是数组

时间:2019-12-18 22:36:03

标签: php arrays json laravel

我有这个代码

            $list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t)
{
            return $t->visitors->count();
        });
        return json_encode($list);

此代码返回对象,而不是数组。我该如何更改?

3 个答案:

答案 0 :(得分:1)

您只需要调用->all()集合方法,所以

$list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t)
      {
             return $t->visitors->count();
      }
)->all();

这与->toArray()方法不同,因为它还会将集合内的对象也强制转换为数组,并且不仅是集合本身(实际上->all()不会强制转换任何内容,它只会返回集合中的元素)

答案 1 :(得分:1)

如果要在末尾添加实际的JSON数组,则应添加check_range=False

由于您可能会添加其他操作(例如过滤器和转换),因此我会在最后一刻致电->values()

->values()

在其他选项上使用return json_encode($list->values()); 的原因是它会重置阵列键。如果您尝试返回一些关联数组(例如->values()甚至是['name' => 'Roman']),它将始终被编码为一个对象。您需要有一个普通数组(顺序整数键从0开始),以避免过滤和排序会发生意想不到的事情。

答案 2 :(得分:0)

$list = Elements::where('list_id', $id)->with('visitors')->get();;

此代码返回集合实例。 $collection->sortBy(...);也是Collection实例。要在Collection中获取数组,必须使用或->toArray()->all()

您可以使用

$list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t) {
    return $t->visitors->count();
})->all();