Laravel - 使用一系列ID给出的特定顺序对集合进行排序

时间:2017-12-03 22:20:08

标签: php arrays sorting laravel-5 laravel-collection

我试图实现以下目标:

假设我收藏了类似这样的产品:

$ products =

[{ id: 1, name: example1, price: 10 }, {id: 2, name: example2, price: 20}]

一个有一个id的数组:

[0 => 2]

我想用数组对$ products集合进行排序,这将导致在集合中首先显示id为2的产品,或者在类似的单词中为数组中的id集合中的项目提供顺序优先级,我希望你能理解我。

我没有成功的尝试(无法看到任何变化):

$events = $events->sortBy(function($model) use ($ToposDestaques) {
                return array_search($model->getKey(), $ToposDestaques);
            });

$ events有两个id为id且id为2的项目。

$ TopoDestaques具有以下值:

array:1 [
  0 => 2
]

谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定你是否应该使用sortBy函数执行此操作,因为您按ID的数组排序,因此您应该迭代它而不是集合。
这可以仅使用PHP std处理:

$products = [[ "id"=> 1, "name"=> "example1", "price"=> 10 ], [ "id"=> 2, "name"=> "example2", "price"=> 20 ],  [ "id"=> 3, "name"=> "example3", "price"=> 30 ]];
$sortByArr = [3, 2];

$sortedArray = array_reduce($sortByArr, function($array, $index) use (&$products) {
    $productIndex = array_search($index, array_column($products, "id"));
    $array[] = $products[$productIndex];
    unset($products[$productIndex]);
    return $array;
}, []);

var_dump(array_merge($sortedArray, $products));