strpos не работает для первой строки среди строк через запятую - PullRequest
0 голосов
/ 04 июля 2019

См. демо

У меня есть два списка строк, разделенных запятыми, и я хочу найти строки и вернуть сообщение. Я заметил, что в конкретном случае, когда я ищу первую строку первого списка, он не найдет ее. Если я переместу эту строку в другое место, это будет Не могу понять почему.

$dynamic_list = "AZ, CA, CO";
$static_list = "MN,WA,IA";

$search = "AZ";


if ( strpos($dynamic_list . ',' . $static_list, $search) == false && !empty($search) ) { // check string is not empty + that it is not on any of the lists
    echo 'not found: String '.$search.' was not found in lists';
} else {
    echo 'found';
}

Ответы [ 3 ]

2 голосов
/ 04 июля 2019
    $dynamic_list = "AZ, CA, CO";
    $static_list = "MN,WA,IA";

    $search = "AZ";


    if ( strpos($dynamic_list . ',' . $static_list, $search) === false && !empty($search) ) { // check string is not empty + that it is not on any of the lists
        echo 'not found: String '.$search.' was not found in lists';
    } else {
        echo 'found';
    }

добавьте === и попробуйте

1 голос
/ 04 июля 2019

Обратите внимание на наше использование ===.Просто == не будет работать должным образом, потому что позиция 'A' в 'AZ' является 0-м (первым) символом.Так что === сделает всю работу за вас здесь.Давайте попробуем с ===

См. Примеры здесь: https://www.php.net/manual/en/function.strpos.php

Предупреждение

Эта функция можетвозвращает логическое значение FALSE, но может также возвращать небулево значение, которое оценивается как FALSE.Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации.Используйте оператор === для проверки возвращаемого значения этой функции.

<?php

$dynamic_list = "AZ, CA, CO";
$static_list = "MN,WA,IA";
$search = "AZ";

if (strpos($dynamic_list . ',' . $static_list, $search) === false) {
    echo 'not found: String '.$search.' was not found in lists';
} else {
    echo 'found';
}

DEMO: https://3v4l.org/bo4Yjr

1 голос
/ 04 июля 2019

Вам просто нужно заменить === на ==, поэтому он проверит тип переменной на, здесь ваш strpos() возвращает 0, который будет читаться так же, как и ваш, если получит

$dynamic_list = "AZ, CA, CO";
$static_list = "MN,WA,IA";
$search = "AZ";
if ( strpos($dynamic_list . ',' . $static_list, $search) === false && !empty($search) ) { 
        echo 'not found: String '.$search.' was not found in lists';
} else {
        echo 'found';
}
...