Laravel / PHP从数组中获取密钥

时间:2017-08-14 10:26:46

标签: php arrays laravel laravel-5 collections

我有一个集合

Collection {#364 ▼
      #items: array:2 [▼
        24 => Collection {#375 ▼
          #items: array:3 [▶]
        }
        0 => Collection {#376 ▶}
      ]
    }

我尝试转换为数组抓取键并对它们进行排序

dd(sort(array_keys($group_ids->toarray())));

我收到错误只应通过引用传递变量

我需要按升序将此集合转换为键数组。

dd(array_keys($group_ids->toArray()));

似乎给了我需要但我无法转换它。

array:2 [▼
  0 => 24
  1 => 0
]

2 个答案:

答案 0 :(得分:1)

由于PHP sort()函数需要引用而引发Only variables should be passed by reference错误,它只能是一个变量而不是另一个函数的返回值。要解决此错误,您可以使用如下的中间变量:

$keys = array_keys($group_ids->toArray());
sort($keys);

由于您已经使用了Laravel Collection,因此您只需使用keys()sort()方法即可。假设$group_idsCollection的一个实例,您可以提取密钥并按升序排序:

$sortedKeys = $group_ids->keys()->sort()->toArray();

希望这有帮助!

答案 1 :(得分:0)

以下解决方案可能适合您。

当你致电User::all()时,你会得到类似的结果:

0 => points: 10
1 => points: 50
2 => points: 30
3 => points: 70
4 => points: 20

你可以做的是使用values()函数,它将重置你的集合的键:

0 => points: 70
1 => points: 50
2 => points: 30
3 => points: 20
4 => points: 10

您可能尝试从值中对数据进行排序。所以关键是自动整理出来。

$users = User::all();
$users = $users->sortByDesc(function($item){
    return $item->points()->sum('amount');
})->values();

我不确定这个解决方案,但希望它对您的问题有所帮助。在你的问题中,我没有看到任何查询,所以我对你如何生成这些集合没有多少。

由于