Eloquent集合按数组传递回调排序

时间:2017-04-23 10:21:13

标签: arrays laravel sorting eloquent

我有一个像这样的集合

$collection = [
    1 => [
        ...
    ],
    2 => [
        ...
    ],
    3 = [
        ...
    ]
];

按我要排序的数组

$sort =[
    3, 1, 2
];

我试图了解如何使用这样的代码对$collection进行排序

$collection->sortBy(function($unit, $id) use ($sort) {
     return ...;
})

但是我自己无法想象,我已经有了工作的例子,我只是预先处理所有$ collection元素,并通过我可以“正常”排序的方式为它们分配一些int,但如果可能的话,它对我来说仍然很有趣按另一个数组排序,而不将其他键分配给集合元素。

3 个答案:

答案 0 :(得分:2)

你的意思是krsort

http://php.net/manual/en/function.krsort.php

krsort($collection);
foreach ($collection as $key => $val) {
    echo "$key = $val\n";
}

答案 1 :(得分:1)

Laravel集合包括一个map()方法来处理这样的事情。

https://laravel.com/docs/5.4/collections#method-map

也可能值得查看mapWithKeys()方法。

这些方法允许您传入一个集合并迭代它,将每次迭代传递给您定义的回调函数。

答案 2 :(得分:0)

解决方案

$sort
    ->mapWithKeys(
        function($id) use ($collection) {
            return [
                $id => $collection->get('id', $id)
            ];
        }
    )