#php #arrays #indexing #associative-array
#php #массивы #индексирование #ассоциативный-массив
Вопрос:
У меня есть метод, fetch_widgets
, который извлекает виджеты из базы данных (MySQL). Я передаю ему $options
массив, чтобы я мог выборочно добавлять предложения WHERE
и JOIN
, добавлять / удалять столбцы и т.д.
Например:
$options = array();
$options[] = 'include_disabled';
$options[] = 'include_tag_ids';
$options['start_date'] = '2011-01-01';
$options['end_date'] = '2011-01-31';
В fetch_widgets
я проверяю параметры, используя либо:
if(array_key_exists('start_date',$options)) { ... }
или:
if(in_array('include_tag_ids',$options)) { ... }
в зависимости от того, активирована опция или нет, она просто должна присутствовать (например include_disabled
) или иметь ключ и значение (например end_date
).
Я сталкиваюсь с трудностями, потому что получаю странные результаты из-за того, in_array
что $options
массив содержит значения с ключом и без ключа. Кто-нибудь может пролить свет на это?
Комментарии:
1. Что за странное поведение вы получаете?
2. Учитывая приведенный выше
$options
массив, у меня былin_array('include_tag_ids',$options)
возврат false. Кажется, я решил это сейчас, не уверен, что я изменил, но это снова работает
Ответ №1:
Не смешивайте массивы с ключом и массивы без ключа, если вам нужно согласованное поведение.
Вместо этого сделайте что-то вроде этого:
$options = array();
$options['include_disabled'] = true;
$options['include_tag_ids'] = true;
$options['start_date'] = '2011-01-01';
$options['end_date'] = '2011-01-31';
Комментарии:
1. 1 Я абсолютно согласен, хотя мне все равно было бы интересно узнать, с какой проблемой он сталкивается и почему.
2. Мне тоже любопытно. Основываясь на том, что он показывал, теоретически это должно сработать, но кто знает.
3. Мне тоже любопытно! Если это снова всплывет, я обязательно вернусь.