Как получить уникальные значения из foreach

Я пытаюсь получить уникальные значения в раскрывающемся списке. Код для выпадающего:

@foreach($admin_bills as $admin_bill)
<?php $month = date('M, Y', strtotime($admin_bill->created_at)); ?>
<option value="{{ $admin_bill->id }}">{{ $month }}</option>
@endforeach

Это дает мне все значения, основанные на created_at, Например, если есть несколько записей в одном месяце, это дает мне такие результаты, как

Aug, 2017
Aug, 2017
Aug, 2017
Sep, 2017
Sep, 2017

Но если в одном месяце несколько записей, я хочу, чтобы они отображались один раз в раскрывающемся списке. Так что результат будет такой:

Aug, 2017
Sep, 2017

Я не могу просто использовать функцию вроде array_unique() здесь и $admin_bill->id должен получить первый идентификатор уникального $month, Как я могу это сделать? Пожалуйста помоги. Я использую Laravel 5.4

Спасибо.

2

Решение

Рекомендуется решить это в контроллере. Не в поле зрения. В контроллере вы можете написать что-то вроде следующего:

$admin_bills->pluck('created_at')->map->format('M, Y')->distinct();

Я не проверял это, но я думаю, что это приведет вас в правильном направлении.

Я предполагаю, что created_at свойство автоматически анализируется для объекта углерода. Потому что так работает Ларавел.

2

Другие решения

Если вы переместите эту логику в контроллер, вы можете сделать это с помощью простого цикла:

$uniques = [];
foreach ($admin_bills as $bills) {
$month = date('M, Y', strtotime($bills->created_at));
if (!in_array($month, $uniques)) {
$uniques[] = [
'date' => $month,
'id' => $bills->id
];
}
}

// Useage
foreach ($uniques as $v) {
$v['id']
$v['date']
}
1

Попробуйте отформатировать его в вашем контроллере:

    $admin_bills_formated = $admin_bills->map(function ($item, $key) {
$item->month = Carbon::parse($item->created_at)->month;
return $item;
});

$admin_bills_grouped = admin_bills_formated->groupBy('month');
0

Предполагая ваш admin_bills переменная является коллекцией и created_at поле является Carbon пример.

В вашем контроллере

$adminBillUniqueMonths = $adminBills->unique(function($bill) {
$bill->created_at->format('Ym');
});

и по вашему мнению

@foreach($adminBillUniqueMonths as $bill)
<option value="{{ $bill->id }}">{{ $bill->created_at->format('M, Y') }}</option>
@endforeach
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector