0

我有一个表单,当前显示具体 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>
4

2 回答 2

0

您正在寻找array_filter

例子

  $mp_ids = [1,5,81,81,23];

  $mp_ids = array_filter($mp_ids, function($value){
    return $value != 81;
  });

如果您只是在视图上方执行此操作,那么您可以将此逻辑排除在您的视图之外,并使事情变得更清晰。

很多业务逻辑应该被排除在视图之外,否则事情会很快变得混乱。

现在$mp_ids将是一个包含除 81 之外的任何值的数组。您可以将其包装到一个函数中以使其更灵活。

ID的自定义过滤功能

  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 循环中的性能,因为它只循环它应该输出的项目,而不必经常检查它是否应该或不应该。

于 2018-02-28T18:20:34.603 回答
0

您可以在块开始continue后直接使用。foreach像这样的东西:

foreach block...

if ($break['mdpID'] == 81) {
    continue;
}
于 2018-02-28T18:21:45.817 回答