mysql — двойной foreach с условием переполнения стека if

Мне нужна помощь, потому что у меня проблема с выполнением моего кода.
В моей базе данных я храню множественный выбор, например, массив в следующем формате: [«5», «6», «7», «8»]. Я использую json_encode для хранения моего массива.

У меня есть форма с выбором нескольких (https://www.virtuosoft.eu/code/bootstrap-duallistbox).

Этот вход заполнен данными таблицы. Так что это список слева, который заполнен.

Я хотел бы заполнить список справа моими данными, хранящимися в базе данных. Для этого мне нужно поставить выбранные для каждого варианта соответствующие.
Но я понятия не имею, чтобы сделать это … Я думаю, что я использую двойной foreach с условием if, но ….

Некоторый код, чтобы объяснить это:

Таблица со всеми сохраненными параметрами:
Название стола: свадьбы
Поля: идентификатор, заголовок

Таблица с выбранными параметрами сохранена

Название таблицы: шаги
Поля: id, members => в этом поле указан номер weddings.id, например [«5», «6», «7», «8»]

Чтобы заполнить мой список выбора, я делаю это

<select multiple="multiple" id="participants" class="form-control" name="participants[]">
@foreach ($weddings as $wedding)
<option value="{{ $wedding->id }}" >{{ $wedding->title }}  </option>
@endforeach
</select>

Чтобы извлечь данные из шагов, я делаю это

foreach(json_decode($step->participants) as $k => $v){
echo '<option value="'.$v.'" selected>'.$v.'</option>';
}

Поскольку мне нужно поставить «выбранные» в опцию, этот перейти к правильному списку.

Как я могу объединить 2 foreach, чтобы «выбрать» хранилище значений в моей таблице шагов с таблицей свадеб?

Надеюсь, ты меня понимаешь.

Большое спасибо.

PS: я использую Laravel

0

Решение

Попробуйте это, и самое главное, поймите это!

// select all participants
// for example lets say you got this from your database
$data = '["5","7","9","2"]';
// now decode it
$data = json_decode($data);

$weddings = [];
// convert values to integers
foreach($data as $key => $value)
{
$weddings[$key] = (Int) $value;
}

// create select input
$input = '<select>';

foreach($weddings as $id)
{
// lets say you want wedding id 5 to be selected
// all you have to do is add an If statement and that's it !
if($id === 5) {
// this is wedding id 5 !
$input .= '<option value="'.$id.'" selected>'.$id.'</option>';
} else if ($id === 7) {
// do something with wedding id 7 ?
$input .= '<option value="'.$id.'" class="number7">'.$id.'</option>';
} else {
$input .= '<option value="'.$id.'">'.$id.'</option>';
}
}

// close select input tag
$input .= '</select>';

echo $input;
1

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

Удивительно !!! Оно работает.

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

большое спасибо azjezz.

Для информации, это мой рабочий код:

<div id="select-participants" class="form-group {{ $errors->has('participants') ? 'has-error' : '' }}">
<label for="participants" class="col-sm-2 control-label">{!! $errors->has('participants') ? '<i class="fa fa-times-circle-o"></i>' : '' !!}Participants</label>
<div class="col-sm-10">
<select multiple="multiple" id="participants" class="form-control" name="participants[]">
@php
$export_json_participants = json_decode($preparationStep->participants);
@endphp
@foreach($export_json_participants as $key => $value)
$export_json_participants[$key] = $value;
@foreach ($weddings as $wedding)
<option value="{{ $wedding->id }}" {{ $wedding->id == $export_json_participants[$key] ? 'selected' : '' }}>{{ $wedding->title }}</option>
@endforeach
@endforeach
</select>
@if ($errors->has('participants'))
<span class="help-block">
<strong>{{ $errors->first('participants') }}</strong>
</span>
@endif
</div>
</div>

Большое спасибо, и все в порядке, я понял. 🙂

0