2 回答
TA贡献1790条经验 获得超9个赞
$stores = [];
$storeInfos = session('storeinfo');
usort($storeInfos, function($a, $b) {
if (!isset($a['distance'])) {return -1;}
if (!isset($b['distance'])) {return 1;}
if ($a['distance'] == $b['distance']) {
return 0;
}
return ($a['distance'] < $b['distance']) ? -1 : 1;
});
foreach ($storeInfos as $storeInfo) {
$store = Store::find($storeInfo['id']);
if ($store) {
$store->distance = $storeInfo['distance'];
$stores[] = $store;
}
}
return $stores;
TA贡献1802条经验 获得超5个赞
您可以使用whereIn()查询构建器中的函数来使用数据数组进行过滤。
$stores = StoreInfo::whereIn(
'id',
collect(session('storeinfo'))->map->id->toArray()
)
->get()
->map(function($storeDetail) {
//find the matching storeinfo from session.
$storeInfo = collect(session('storeinfo'))
->firstWhere('id', $storeDetail->id);
// set distance
return $storeDetail->distance = $storeInfo['distance'];
});
添加回答
举报