从foreach循环中排除值


excluding values from a foreach loop

我有以下代码:我知道这可能都是错的,但是我以前没有处理过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>';

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

如果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>';
}
$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>';
}

对于多行循环,需要大括号。同时,将数组声明移出循环

你可以把它变成…

$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)非常有用。

我可能会写得有点不同这是不正确的($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>';
}