Мне нужна помощь, потому что у меня проблема с выполнением моего кода.
В моей базе данных я храню множественный выбор, например, массив в следующем формате: [«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
Попробуйте это, и самое главное, поймите это!
// 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;
Удивительно !!! Оно работает.
Но мне нужно изменить закрытие первого 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>
Большое спасибо, и все в порядке, я понял. 🙂