Можем ли мы использовать побитовый оператор "|" с strpos в php?
Можем ли мы использовать побитовый оператор "|" с strpos в php? Мне нужно проверить, существуют ли строки a0,a1,a2,a5 в данной переменной $status. Мой код указан ниже. Мой код будет возвращать значения (позицию) только в том случае, если переменная состояния имеет значение =a0 или a1 или a2 или a5. Она возвращает false, когда тестовая строка $status='a1.
$status='a1 test string';
echo strpos("|a0|a1|a2|a5|", $status);
4 ответа
Вы можете использовать это так. Вот |
средства or
<?php
$status='a1 test string';
if(preg_match("/\b(a0|a1|a2|a5)\b/", $status))
{
echo "Matched";
}
Нет, ты не можешь. Документация не упоминает ничего отдаленно похожего:
strpos
- Найти позицию первого вхождения подстроки в строкеНайти числовую позицию первого вхождения
needle
вhaystack
строка.параметры
haystack
Строка для поиска.
needle
Если игла не является строкой, она преобразуется в целое число и применяется в качестве порядкового значения символа.
offset
Если указан, поиск будет начинаться с этого количества символов, отсчитываемого от начала строки. Если смещение отрицательное, поиск будет начинаться с того количества символов, которое отсчитывается от конца строки.
На самом деле, не имеет смысла реализовывать такую функцию, так как у вас уже есть полноценный движок регулярных выражений:
$has_substrings = (bool)preg_match('/a0|a1|a2|a5/u', $status);
Можем ли мы использовать побитовый оператор "|" с strpos в php?
как побитовый оператор |
- нет
как буквальный символ |
- да
Вы не можете сделать это с помощью поиска одной строки. Вам нужно использовать либо регулярное выражение, которое может проверять сразу несколько вариантов, либо вам нужно перебирать условия поиска.
Сахил Гулати привел простой пример подхода, основанного на регулярных выражениях.
Вот простой итерационный подход:
<?php
$status = 'a1 test string';
$search = explode('|', substr("|a0|a1|a2|a5|", 1, -1));
// would be much easier to start with an array of search tokens right away:
// $search = ['a0', 'a1', 'a2', 'a5'];
$result = false;
array_walk($search, function($token) use ($status, &$result) {
$result = (FALSE!==strpos($status, $token)) ? true : $result;
});
var_dump($result);