Intereting Posts
Не удалось получить соединение: php_network_getaddresses: getaddrinfo не удалось: имя или услуга неизвестны не может получить НЕКОТОРЫЕ переменные сеанса на разных страницах Загрузка ZIP-файла на S3, использование EC2 для распаковки .htaccess защитить пароль, но разрешить типы файлов изображений Проверьте наличие определенного разрешения пользователя Facebook с помощью PHP Загрузите файл с помощью ajax-вызова Как вы отслеживаете файлы в SMB с помощью приложения? MySQL 5.5 до 5.7 прекратил использование индексов Кросс-компиляция PHP с помощью UCLIBC Интерактивная оболочка с использованием PHP scandir () сортировать по дате изменения Данные таблицы не отображаются с помощью Pagination PHP Исключить исключение «PDOException» с сообщением «SQLSTATE : недопустимый номер параметра ' Как передать несколько переменных в PHP с помощью jQuery Как отправить несколько вложений в одну почту в php

Проверка нескольких значений strpos

Мне интересно, как выполнить несколько проверок strpos.

Позвольте пояснить:
Я хочу, чтобы strpos проверила переменную «COLOR», чтобы узнать, не находятся ли какие-либо числа от 1 до 8 в переменной. Если присутствуют какие-либо числа от 1 до 8, я хочу, чтобы эхо «выбрано».

Примеры:
Скажем, только номер 1 находится в переменной, он будет эхо «выбран».
Предположим, что цифры 1 2 и 3 находятся в переменной, она будет эхо «выбрана».
Предположим, что цифры 3 9 25 находятся в переменной, она будет эхо «выбрана» (из-за этого 3 !!).
Скажем, только число 9 находится в переменной, оно НЕ будет эхо.
Скажем, числа 9 25 48 находятся в переменной, она НЕ будет эхо.

Я просто использовал инструкцию OR (||)

 <?php if (strpos($color,'1') || strpos($color,'2') || strpos($color,'3') || strpos($color,'4') || strpos($color,'5') || strpos($color,'6') || strpos($color,'7') || strpos($color,'8') === true) { //do nothing } else { echo "checked"; } ?> 

Я нашел эти ответы неполными и придумал свою собственную функцию:

 /** * Multi string position detection. Returns the first position of $check found in * $str or an associative array of all found positions if $getResults is enabled. * * Always returns boolean false if no matches are found. * * @param string $str The string to search * @param string|array $check String literal / array of strings to check * @param boolean $getResults Return associative array of positions? * @return boolean|int|array False if no matches, int|array otherwise */ function multi_strpos($string, $check, $getResults = false) { $result = array(); $checks = (array) $check; foreach ($check as $s) { $pos = strpos($string, $s); if ($pos !== false) { if ($getResults) { $result[$s] = $pos; } else { return $pos; } } } return empty($result) ? false : $result; } 

Применение:

 $string = "A dog walks down the street with a mouse"; $check = 'dog'; $checks = ['dog', 'cat', 'mouse']; # # Quick first position found with single/multiple check # if (false !== $pos = multi_strpos($string, $check)) { echo "$s was found at position" . $pos; } if (false !== $pos = multi_strpos($string, $checks)) { echo "$s was found at position" . $pos; } # # Multiple position found check # if (is_array($found = multi_strpos($string, $checks, true))) { foreach ($found as $s => $pos) { echo "$s was found at position $pos <br>"; } } 

попробуйте выполнить предварительный матч для нескольких

 if (preg_match('/word|word2/i', $str)) 

strpos () с несколькими иглами?

Если все значение разделено пробелом в значении, вы можете сделать следующее. В противном случае игнорируйте его.

Это необходимо, потому что если у вас $color="25"; то strpos найдет как 2, 5, так и 25, поэтому требуемый результат не будет

 <?php $color='1 25 48 9 3'; $color_array = explode(" ",$color); $find = range(1,8);//array containing 1 to 8 $isFound = false; foreach($find as $value) { if(in_array($value, $color_array)) { $isFound = true; break; } } if($isFound) { echo "Selected"; } ?>