从foreach循环中排除值

时间:2011-11-17 22:46:47

标签: php foreach

我有以下代码..我知道它可能都错了,但我之前没有处理过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>';

显然它在某个地方出了问题,有什么帮助吗?

4 个答案:

答案 0 :(得分: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>';
}

您需要多线循环的大括号。另外,在循环外移动数组声明

答案 1 :(得分:2)

如果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 :(得分:0)

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

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

答案 3 :(得分:0)

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