PHP: как оптимизировать несколько условных

У меня есть цикл с несколькими условностями

foreach ($fields as $field_key => $value) {

if ($field_key !== 'a' && $field_key !== 'b' && $field_key !== '10200' && $field_key !== 'z' && $field_key !== 'y') {
 ...
//display $value;

}

}

Как оптимизировать код, чтобы избежать множественных условностей в условии if?

I am thinking of filing an array with {a, b, y, z} an search against it for a value to not be found there, using e.g in_array, search_array

1
Попробуйте ! In_array() ...
добавлено автор Bogdan Burim, источник

5 ответы

Вы можете создать таблицу поиска:

$exclude = array('a' => true, 'b' => true , '10200' => true , 'z' => true, 'y' => true);

foreach ($fields as $field_key => $value) {
    if (!isset($exclude[$field_key])) {
        //display $value;
    }
}

Или предварительно отфильтруйте элементы:

$filtered_fields = array_diff_keys($fields, $exclude);

foreach($filtered_fields as $field_key => $value) {
    //display $value;
}
1
добавлено
@ArtemL: Тогда не используйте array_flip .
добавлено автор Felix Kling, источник
@ArtemL: Вы всегда должны идти на компромиссы.
добавлено автор Felix Kling, источник
Не так эффективно, как использование in_array . PHP тратит время на перенос вашего массива.
добавлено автор Artem L, источник
Извините за неправильное форматирование ... Ваш код немного медленнее с низким количеством элементов. bumz @ artem-lubuntu-pc:/tmp/proof $ time PHP test1.php real 0m0.019s пользователь 0m0.012s sys 0m0.004s bumz @ artem-lubuntu-pc:/tmp/proof $ time PHP test2.php real 0m0 .024s пользователь 0m0.016s sys 0m0.004s
добавлено автор Artem L, источник
Да. Без array_flip это будет быстрее. Но код будет похож на вирусы.
добавлено автор Artem L, источник

Попробуйте с помощью in_array :

$keys = array('a', 'b', '10200', 'z', 'y');

foreach ($fields as $field_key => $value) {
  if ( !in_array($field_key, $keys) ) {
    //display $value;
  }
}
0
добавлено

Другой вариант.

ignore = array('a', 'b', '10200', 'z', 'y');
$allowed = array_diff_key($fields, array_combine($ignore, $ignore));
foreach ($allowed as $field_key => $field_value) {
    //...
}
0
добавлено

Попробуйте использовать встроенную функцию PHP in_array() :

$vals = array('a', 'b');

foreach ($fields as $field_key => $value) {

    if (!in_array($field_key, $vals)) {
         ...
        //display $value;

    }

}
0
добавлено
$array = array('a', 'b', '10200', 'z', 'y');

foreach ($fields as $field_key => $value) {    
    if (!in_array($field_key, $array)) {
    ...
    //display $value;    
    }
}
0
добавлено
Отсутствует массив в первой строке.
добавлено автор hsz, источник
Yeap, исправлено, извините.
добавлено автор Viacheslav Kondratiuk, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp