【问题标题】:excluding values from a foreach loop从 foreach 循环中排除值
【发布时间】:2011-11-17 22:46:46
【问题描述】:

我有以下代码..我知道这可能全都错了,但我之前没有处理过 foreach 循环。

$last_names = regapiGetLastNames( NULL, -1 );
foreach ($last_names as $name => $last_name_id)
    $exclude = array('11196','11195','11198','11197');
    if(!in_array($name->last_name_id, $exclude)):
    print '<option value="'.$last_name_id.'">'.$name.'</option>';

显然是哪里出了问题,请帮忙?

【问题讨论】:

  • 把这个放在你的页面上,然后在这里发布结果。 $last_names = regapiGetLastNames(NULL, -1); print_r($last_names);

标签: php foreach


【解决方案1】:

如果ID是数组值,那么你也可以使用array_diff来过滤它们:

$last_names = regapiGetLastNames( NULL, -1 );

$exclude = array('11196','11195','11198','11197');
$last_names = array_diff($last_names, $exclude);

foreach ($last_names as $name => $last_name_id) {
    print '<option value="'.$last_name_id.'">'.$name.'</option>';
}

【讨论】:

    【解决方案2】:
    $last_names = regapiGetLastNames( NULL, -1 );
    $exclude = array('11196','11195','11198','11197');
    foreach ($last_names as $name => $last_name_id)
    {
        if(!in_array($name->last_name_id, $exclude))
            print '<option value="'.$last_name_id.'">'.$name.'</option>';
    }
    

    多行循环需要大括号。另外,将数组声明移到循环之外

    【讨论】:

    • 这个解决方案看起来很可靠,尽管没有 {} 的单行 ifs 是不好的做法 imo。
    • 另外,$name => $last_name_id 看起来你可以只调用 $last_name_id,但由于你使用了 $name->last_name_id,我假设你是这样打算的。也许 $name 是一个对象。我不知道。
    • 是的,你可以辩论任何非{},最后我认为这总是不好的做法。我只是想展示他将如何使用它,因为他的原版没有牙套。
    • 这不排除名字..它们仍然出现在选择中。
    【解决方案3】:

    你可以把它变成......

    $last_names = regapiGetLastNames( NULL, -1 );
    
    $last_names = array_filter($last_names, function($value) {
        return in_array($value, array('11196','11195','11198','11197'));
    });
    
    foreach ($last_names as $name => $last_name_id) {
        print '<option value="'.$last_name_id.'">'.$name.'</option>';
    }
    

    当你开始循环时,你只是在迭代你想要的集合。这对于分离您的业务规则(删除某些 id)和表示(与 HTML 相呼应)很有用。

    【讨论】:

      【解决方案4】:

      我可能会写得有点不同,这是不正确的($name 不是对象)

      $name->last_name_id
      

      类似的东西:

      $last_names = regapiGetLastNames( NULL, -1 );
      $exclude = array('11196','11195','11198','11197');
      
      foreach ($last_names as $name => $last_name_id) {
          if(!in_array($last_name_id, $exclude)) print '<option value="'.$last_name_id.'">'.$name.'</option>';
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        • 2013-09-17
        • 2012-10-30
        相关资源
        最近更新 更多