我需要在Laravel 5.3中使用collect,但我需要帮助。
例如:
$collection = collect([
'Apple' => [
['name' => 'iPhone 6S', 'price' => '200'],
['name' => 'iPhone 7S', 'price' => '250'],
],
'Samsung' => [
['name' => 'Galaxy S7', 'price' => '300']
['name' => 'Galaxy note', 'price' => '150']
],
]);
Apple
或Samsung
名称?我需要获得品牌名称。谢谢: - )
答案 0 :(得分:2)
您可以通过mapWithKeys
实现这一目标/* First get the minimum price */
$min = $collection->flatten(1)->pluck('price')->min();
/* Then perform the filteration */
$final = $collection->mapWithKeys(function($value, $key) use ($min) {
$result = collect($value)->filter(function($inner) use ($min){
return $inner['price'] === $min;
})->keys()->first();
return $result ? [$key => $value[$result]]: [];
});
当您运行上述代码时,您将获得
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[Samsung] => Array
(
[name] => Galaxy note
[price] => 150
)
)
)
现在只需要做品牌名称
$final->keys()->first() // Samsung
获取型号名称
$final->pluck('name')->first() // Galaxy note
答案 1 :(得分:1)
您需要使用每个来通过外部数组并在内部数组中使用min来获得最低价格。然后,您必须搜索以查找索引并返回并使用它来获取名称/价格。按照这个速度,你可能最好编写一个自己阅读得更好的函数。
$collection->each(function ($item, $brand) {
$minPrice = $item->min('price');
$minIndex = $item->search(function ($item) use ($minPrice) {
return $item['price'] == $minPrice
});
echo $brand.' '.$item[$minIndex]['name']. ' '.$item[$minIndex]['price'];
});
你可能不得不收集内部物品,因为我不记得收集是否自动嵌套所有收藏品