Предложение 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 будет не соответствовать, и ошибка будет возвращаться, и вам нужно разобраться с этим случаем.
Ответ - то, что в PHP "ложное" значение может быть удовлетворено горсткой значений, таких как пустой массив, пустая строка, ПУСТОЙ УКАЗАТЕЛЬ, целое число 0, и т.д. Посмотрите пустое () функциональная страница для полного списка:
Таким образом, это всегда приводило бы к неправильным результатам:
if(strpos("abc", "a")) {
echo "Yes";
} else {
echo "No";
}
Так как "a" происходит в первом положении (индекс 0) затем, PHP полагает "если (0)" быть ложью.
Когда ремни для правки бритв НЕ найдут иглу в Вашем стоге сена, это возвратит булев FALSE, который является тем, что Вы хотите свериться с тройным равным оператором, который проверяет и тип и значение. См. документы об операторах сравнения
http://www.php.net/manual/en/language.operators.comparison.php
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"
Не знайте, было ли что-то вроде этого легче поддержать. Зависит, если Вы делаете что-то еще в тех если условия. Но можно установить ключи в файле конфигурации, дб, передаче как аргумент функции, или подобный.
$keys = array(
'foo',
'bar',
'brr',
'ffo',
);
foreach ($header as $idx => $field) {
foreach ($keys as $key) {
if (stripos($field, $key) !== false) {
$cols[$key] = $idx;
break;
}
}
}
Поскольку, если строка, подобранная в положении 0, 0, оценивает ко лжи, таким образом, Вы удостоверяетесь, что добавили дополнительное '=' так, чтобы тип был принят к соображению.
strpos()
возвращает false, когда НИКАКОЕ соответствие не найдено.
Проверьте операторы сравнения.
В PHP! == средства не того же типа И значения.
Если stripos () возвращает что-нибудь кроме лжи (и точно 'ложь' и не нуль), это означает, что это нашло что-то, даже если положение 0, и интервал (0) возвращается. 0 и ложь равны при выполнении стандартного сравнения с ==, но не при использовании идентификационных данных === оператор, таким образом, единственный способ знать, нашел ли stripos () что-то наверняка, состоит в том, чтобы сравнить значение лжи и использование типа! == (не идентичный, т.е. и того же типа и значения ремней для правки бритв () возвращаемое значение.)