У меня есть форма, которая в настоящее время отображает флажки из диапазона в атрибуте на конкретном 5.6. Что мне нужно сделать, это взять этот список, но теперь отфильтровать один элемент.
Я хочу отфильтровать mpdID
из 81
,
Код, используемый для отображения:
<div class="clearfix">
<strong><?php echo t('Choose Day')?></strong>
<?php
if($price_dates){
foreach($price_dates->dates as $break){
?>
<div class="input">
<input type="checkbox"name="mdpID[]"value="<?=$break['mdpID']?>"<?php
if($ticketID['mdpID'] == $break['mdpID']){
echo 'checked';
}
?>
/>
<?=date('D M jS',strtotime($break['date']))?> - £
<?=$break['price']?>
</div>
<?php
}
}
?>
</div>
Ты можешь использовать continue
сразу после вашего foreach
блок начинается. Что-то вроде этого:
foreach block...
if ($break['mdpID'] == 81) {
continue;
}
Ты ищешь array_filter
пример
$mp_ids = [1,5,81,81,23];
$mp_ids = array_filter($mp_ids, function($value){
return $value != 81;
});
Если вы просто сделаете это выше представления, тогда вы можете оставить эту логику вне поля зрения и сделать вещи намного чище.
Большая часть бизнес-логики должна быть оставлена вне поля зрения, иначе все будет быстро захламлено.
Сейчас $mp_ids
будет массив, содержащий любое значение, кроме 81. Вы можете обернуть это в функцию, чтобы сделать его более гибким.
Пользовательская функция фильтра для идентификаторов
function filter_ids($array_of_ids, $exclude) {
return array_filter($array_of_ids, function($value) use ($exclude){
return $value != $exclude;
});
}
filter_ids($mp_ids, 81);
// returns array(3) { [0]=> int(1) [1]=> int(5) [4]=> int(23) }
// return the data to your view to loop and generate the checkboxes
Это всего лишь простой пример, и его определенно можно улучшить. Но должен дать вам представление о том, куда идти дальше, чтобы дать вам больше гибкости.
Спектакль
Это улучшит вашу производительность в цикле foreach, так как он только просматривает элементы, которые должен выводить, и не должен постоянно проверять, следует или нет.