2017-02-21 20 views
1

Мне нужно использовать сбор в Laravel 5.3, но мне нужна помощь.Как использовать коллекцию в Laravel 5.3?

Для примера:

$collection = collect([ 
    'Apple' => [ 
     ['name' => 'iPhone 6S', 'price' => '200'], 
     ['name' => 'iPhone 7S', 'price' => '250'], 
    ], 
    'Samsung' => [ 
     ['name' => 'Galaxy S7', 'price' => '300'] 
     ['name' => 'Galaxy note', 'price' => '150'] 
    ], 
]); 
  1. Как получить Apple или Samsung имя с Collect? Мне нужно получить фирменное наименование.
  2. Как получить (название и цену) самую дешевую цену каждой марки.

Спасибо :-)

+0

ли вы передать документы? –

+0

Привет @curious_coder, Да, но на мой вопрос я не нашел ответа! – mySun

+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

Вы должны были бы использовать каждый пройти через внешний массив и мин во внутреннем одного, чтобы получить мин цену. Затем вам нужно будет найти индекс и вернуться и использовать его для получения имени/цены. В этом случае вам, вероятно, лучше всего писать свою собственную функцию, которая читается более красиво.

$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']; 
}); 

Вы, возможно, придется собирать на внутренних элементов, как я не могу вспомнить, если собирать автоматически гнездится все коллекции

 Смежные вопросы

  • Нет связанных вопросов^_^