исключая значения из цикла foreach - PullRequest
4 голосов
/ 18 ноября 2011

У меня есть следующий код ... и я знаю, что, вероятно, все неправильно, но я раньше не имел дело с циклами 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 ]

2 голосов
/ 18 ноября 2011

Если идентификаторы являются значениями массива, вы также можете использовать 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 голосов
/ 18 ноября 2011
$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>';
}

Вам нужны фигурные скобки для многострочного цикла. также переместите объявление массива за пределы цикла

0 голосов
/ 18 ноября 2011

Я, вероятно, написал бы немного по-другому, это не правильно ($ 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>';
}
0 голосов
/ 18 ноября 2011

Вы можете превратить это в ...

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

Когда вы приступаете к выполнению цикла, вы перебираете только тот набор, который хотите. Это полезно для разделения ваших бизнес-правил (отбрасывание определенных идентификаторов) и представления (повторение HTML).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...