Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Условие наличия значения в массиве
Форумы портала PHP.SU » » Вопросы новичков » Условие наличия значения в массиве

Страниц (1): [1]
 

1. Aricus - 10 Января, 2015 - 13:37:30 - перейти к сообщению
Мне нужно сформулировать условие: если значение переменной присутствует среди значений массива.
Для этого я использовал функцию:
PHP:
скопировать код в буфер обмена
  1. $isWatched = array_search($qListNumAccepted[$numThisQ], $myWatched);

Результатом является пустота, если переменной среди значений нет, и число, если она там есть. До этого момента всё правильно, но при формировании условия
PHP:
скопировать код в буфер обмена
  1. if ((isset($isWatched)) && ($isWatched !== ''))

оказывается, что любые варианты удовлетворяют условию, вне зависимости от наличия переменной в массиве.
Что ещё более странно, противоположному условию
PHP:
скопировать код в буфер обмена
  1. if ((isset($isWatched)) && ($isWatched == ''))

тоже удовлетворяют любые варианты.
2. teddy - 10 Января, 2015 - 13:41:49 - перейти к сообщению
http://php.net/manual/ru/function.in-array.php
3. LIME - 11 Января, 2015 - 06:31:07 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $isWatched = in_array($qListNumAccepted[$numThisQ], $myWatched);

PHP:
скопировать код в буфер обмена
  1. if ((isset($isWatched)) && ($isWatched !== '')) //true

PHP:
скопировать код в буфер обмена
  1. if ((isset($isWatched)) && ($isWatched == '')) //true

Ха-ха
4. andrewkard - 11 Января, 2015 - 12:31:18 - перейти к сообщению
Aricus
пробуйте так:
PHP:
скопировать код в буфер обмена
  1. if ($isWatched!=NULL)
  2. {
  3.     echo "значение переменной присутствует среди значений массива";
  4. }
5. Sail - 12 Января, 2015 - 10:33:56 - перейти к сообщению
Aricus, функция array_search() может вернуть одно из трёх значений.
Вот простой демонстрационный пример:
PHP:
скопировать код в буфер обмена
  1. $arr = array(1, 2, 3, 4);
  2. // есть элемент в массиве
  3. $result[] = array_search(3, $arr); // индекс элемента
  4. // нет элемента в массиве
  5. $result[] = array_search(5, $arr); // false
  6. // ошибка в передаваемых параметрах
  7. $result[] = array_search(1, 2); // null
  8.  
  9. var_dump($result);
  10.  
  11. foreach($result as $value) {
  12.     if($value === false) {
  13.         $str = 'Не найден элемент в массиве';
  14.     } elseif(is_null($value)) {
  15.         $str = 'Неверные параметры, переданные функции array_search()';
  16.     } else {
  17.         $str = 'Индекс найденного элемента: '.$value;
  18.     }
  19.     echo '<br>'.$str;
  20. }
  21.  

 

Powered by ExBB FM 1.0 RC1