strpos - не дает ожидаемых результатов

Я пытаюсь просмотреть некоторую информацию из моей базы данных, чтобы проверить, включен ли код элемента в качестве одного из «ключей» элементов.

Я ожидал, что этот код покажет мне только строки, в которых код НЕ ЯВЛЯЕТСЯ ключом, однако, похоже, я получаю смесь результатов (в некоторых случаях код есть, а в других - нет)

Я попытался изменить true на false и получил аналогичный набор результатов.

   while ($row = mysqli_fetch_array($query)){

        $itemcode = $row['itemcode'];
        $keys = $row['keys'];

        if (strpos($metakeywords, $itemcode) !== true) {
        echo 'code: ' . $itemcode . " keys: " . $metakeywords . "<br /><br />" ;
    }

Ожидаемый результат:
код: ключи ABC123: кашпо, зеленый, окно
код: ключи DEF456: синий, на открытом воздухе, сад

Фактический результат:
код: ABC123 ключи: кашпо, зеленый, окно
код: CBA321 ключи: красный, в помещении, кашпо, CBA321
код: DEF456 ключи: синий, на улице, сад
код: FED654 ключи : розовый, растение, FED654, самополив

Кто-нибудь может помочь?


person Community    schedule 16.01.2018    source источник
comment
Вы хотите проверить === FALSE вместо !== TRUE. strpos возвращает либо число, либо FALSE. Ни один из них никогда не является ИСТИННЫМ.   -  person Patrick Q    schedule 16.01.2018


Ответы (2)


strpos() не возвращает true, когда находит совпадение, а возвращает позицию совпадения.

Если вы хотите знать, когда совпадений нет, используйте:

if (strpos($metakeywords, $itemcode) === false) {

Вы, вероятно, могли бы сделать это полностью в SQL-запросе, а не в PHP.

person Barmar    schedule 16.01.2018

strpos никогда не может вернуть true. Он возвращает число, если есть совпадение, и false в противном случае. Поскольку вы хотите, чтобы блок операторов if запускался, когда совпадений нет, измените true на false и !== на ===:

if ( strpos($metakeywords, $itemcode) === false ) {
person Paul    schedule 16.01.2018