Почему использование! == ЛОЖЬ для проверки stripos в php?

Предложение WHERE определяет, какой документ в выражении UPDATE, а предложение SET - что обновлять. Вам нужно предложение WHERE, чтобы избежать ненужных мутаций.

UPDATE mydoc SET x.myfield = $1 FOR x IN mydoc.myarray WHEN x.`key` = $2 END
WHERE ANY v IN mydoc.myarray SATISFIRS v.`key` = $2 AND v.myfield != $1 END;

Выше оператор обновляет все совпадающие поля в массиве. Зачем вам нужно обновлять несколько утверждений одновременно. Здесь нет ограничений. Но примечание для обновления документа необходимо получить, изменить и записать обратно. В промежутке между некоторыми другими изменениями потока CAS будет не соответствовать, и ошибка будет возвращаться, и вам нужно разобраться с этим случаем.

18
задан VolkerK 19 August 2009 в 07:13
поделиться

5 ответов

Ответ - то, что в PHP "ложное" значение может быть удовлетворено горсткой значений, таких как пустой массив, пустая строка, ПУСТОЙ УКАЗАТЕЛЬ, целое число 0, и т.д. Посмотрите пустое () функциональная страница для полного списка:

http://php.net/empty

Таким образом, это всегда приводило бы к неправильным результатам:

if(strpos("abc", "a")) { 
  echo "Yes";
} else {
  echo "No";
}

Так как "a" происходит в первом положении (индекс 0) затем, PHP полагает "если (0)" быть ложью.

Когда ремни для правки бритв НЕ найдут иглу в Вашем стоге сена, это возвратит булев FALSE, который является тем, что Вы хотите свериться с тройным равным оператором, который проверяет и тип и значение. См. документы об операторах сравнения

http://www.php.net/manual/en/language.operators.comparison.php

51
ответ дан 30 November 2019 в 05:48
поделиться

stripos возвращает положение строки в другом, и если строка не найдена, это возвращает false, таким образом, рекомендуется использовать операторы сравнения идентификационных данных (===! ==), потому что PHP рассматривает 0 как значение "falsy", рассматривают этот пример:

// Find the position of the 'a' character in the 'abc' string:
stripos('abc', 'a') !== false; // true, position is 0
stripos('abc', 'a') != false; // false, 0 is "falsy"
7
ответ дан 30 November 2019 в 05:48
поделиться

Не знайте, было ли что-то вроде этого легче поддержать. Зависит, если Вы делаете что-то еще в тех если условия. Но можно установить ключи в файле конфигурации, дб, передаче как аргумент функции, или подобный.

$keys = array(
    'foo',
    'bar',
    'brr',
    'ffo',
);
foreach ($header as $idx => $field) {
    foreach ($keys as $key) {
        if (stripos($field, $key) !== false) {
            $cols[$key] = $idx;
            break;
        }
    }
}
3
ответ дан 30 November 2019 в 05:48
поделиться

Поскольку, если строка, подобранная в положении 0, 0, оценивает ко лжи, таким образом, Вы удостоверяетесь, что добавили дополнительное '=' так, чтобы тип был принят к соображению.

strpos() возвращает false, когда НИКАКОЕ соответствие не найдено.

Проверьте операторы сравнения.

5
ответ дан 30 November 2019 в 05:48
поделиться

В PHP! == средства не того же типа И значения.

Если stripos () возвращает что-нибудь кроме лжи (и точно 'ложь' и не нуль), это означает, что это нашло что-то, даже если положение 0, и интервал (0) возвращается. 0 и ложь равны при выполнении стандартного сравнения с ==, но не при использовании идентификационных данных === оператор, таким образом, единственный способ знать, нашел ли stripos () что-то наверняка, состоит в том, чтобы сравнить значение лжи и использование типа! == (не идентичный, т.е. и того же типа и значения ремней для правки бритв () возвращаемое значение.)

5
ответ дан 30 November 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: