Есть ли простой способ проверить, находится ли значение внутри строки?
$string = ' 123,456,789,abc789,def' if ($string has '789') { // code }
Я хочу только точное совпадение (так что только 789, а не abc789)
Единственный способ, которым я могу сейчас это сделать, – взорвать строку с помощью запятой, чтобы превратить ее в массив, а затем проверить каждое значение для соответствия. Есть ли лучший / более эффективный способ?
Использование strpos не будет работать, если, например, у вас есть ' 123,456,789,12789,abc,def'
, вместо этого используйте preg_match :
$string = ' 123,456,789,abc789,def'; $what_to_find = '789'; if (preg_match('/\b' . $what_to_find . '\b/', $string)) { // code }
демонстрация
вы можете взорвать его и проверить, находится ли его в массиве
function stringContains($string, $needle) { $arr = explode(',',$string); if(in_array($needle,$arr)) return true; return false; }
кроме предложений stpos, это не вернет true, если вы ищете 12 в строке 123,456, где strpos вернет позицию
Вы можете использовать функцию strpos()
. Он вернет FALSE
если игла не найдена в строке поиска:
if (strpos($string, '789') !== FALSE) { // code... }
Демо!
Если вы хотите точное совпадение, я бы использовал explode()
:
$parts = explode(',', trim($string)); if (in_array('789', $parts)) { // code... }
Демо!
Используйте функцию strpos()
.
$string = ' 123,456,789,abc,def' if (strpos($string,'789') !== FALSE) { // code }
Вы можете использовать функцию strpos
которая используется для поиска вхождения одной строки внутри другой
$string = ' 123,456,789,abc,def'; if (strpos($string,'789') !== false) { echo 'true'; }
См. Руководство
Более короткая версия кода @ Bryan:
function stringContains($string, $needle) { return in_array($needle, explode(',', $string)); }