#php
#php
Вопрос:
У меня есть несколько кодов здесь
if ($brand == "Kumiai Dairies" || $brand == "Anlene" || $brand == "Yoplait" || $brand == "Hokkaido Hidaka"
|| $brand == "Jacob's" || $brand == "V8" || $brand == "Cow amp; Gate"){
do something here;
}
Есть ли какой-либо способ предотвратить повторение $brand == «xxx»??
Ответ №1:
Да, вы можете использовать in_array
:
in_array($brand, array('Kumiai bla', 'Analblah', 'Whatever', ...))
Комментарии:
1. В этой ситуации это несущественно, но, возможно, стоит упомянуть OP, что in_array — это линейный поиск, а array_key_exist (или isset для ключа) — постоянное время. Иногда я использую подход Феликса, если это большой массив, в котором часто выполняется поиск.
2. @red23jordan: линейный поиск требует
O(n)
времени, чтобы найти элемент. Если у вас есть массив с 1000 элементами, вам нужно сделать 1000 сравнений (в худшем случае). Поиск элемента в хэш-таблице, подобной структуре данных, требуетO(1)
, поэтому он не зависит от размера вашего набора. Для небольших наборов, таких как ваш, разница незначительна.3. Ассоциативный массив в PHP — это, по сути, хэш-таблица. Поиск значения в хеш-таблице — это операция с постоянным временем (или … постоянная). Хэш-таблицы отображают ключ в слот. однако in_array должен выполнять линейный поиск по всем значениям, потому что нет быстрого способа найти значение на основе чего-то другого. (Если массив был отсортирован или что-то в этом роде, можно было бы выполнить двоичный поиск или что-то лучше, чем линейный поиск, но хэш-таблица все равно всегда выигрывает.) Редактировать: Феликс опередил меня :). Собираюсь оставить это, потому что это сформулировано немного по-другому.
Ответ №2:
Вы можете создать ассоциативный массив:
$brands = array(
"Kumiai Dairies" => true,
"Anlene" => true,
...
);
а затем проверьте это с помощью
if(isset($brands[$brand])) {
}
Смотрите комментарий @Corbin в ответе @ThiefMaster для объяснения различий этих двух подходов.
Комментарии:
1. Вероятно, вы могли бы сделать определение массива намного лучше, используя обычный массив, а затем
array_flip()
его.2. однако array_flipping будет выполняться за линейное время, поэтому переключение будет полезно только в том случае, если поиск будет выполняться несколько раз при одном запуске скрипта.
Ответ №3:
Вы можете использовать switch, 1. он быстрый, поиск выполняется постоянно 2. не нужно каждый раз создавать массив и искать в нем.
switch($brand){
case "Kumiai Dairies":
case "Anlene":
....
....
//do something
break;
}