我试图实现以下目标:
假设我收藏了类似这样的产品:
$ 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
]
谢谢。
答案 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));