Фильтровать элемент из списка PHP

У меня есть форма, которая в настоящее время отображает флажки из диапазона в атрибуте на конкретном 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>

2 ответа

Ты можешь использовать 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, так как он только просматривает элементы, которые должен выводить, и не должен постоянно проверять, следует или нет.

Другие вопросы по тегам