-1

我正在努力实现以下目标:

可以说我有一系列这样的产品:

$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 为 1 和 id 为 2 的项目。

$TopoDestaques 具有以下值:

array:1 [
  0 => 2
]
4

1 回答 1

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));
于 2017-12-03T23:12:10.540 回答