2009-10-12 2 views
3

У меня есть строкаПроверьте, если строка содержит определенное количество

8,7,13,14,16 

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

$numberA = "13"; 
$string = "8,7,13,14,16"; 

if($string magic $numberA){ 
$result = "Yeah, that number is in there"; 
} else { 
$result = "Sorry."; 
} 

Ищет магию.

ответ

20
<?php 
in_array('13', explode(',', '8,7,13,14,16')); 
?> 

... будет возвращать, является ли «13» в строке.

Просто для того, чтобы уточнить: взорвать превращает строку в массив, разделив ее на каждый «,» в этом случае. Затем in_array проверяет, находится ли строка «13» в результирующем массиве.

+0

Просто для того, чтобы уточнить: 'explode' превращает строку в массив, разделяя ее на каждый ',' в этом случае. Затем 'in_array' проверяет, находится ли строка '13' в результирующем массиве. – gnud

+0

это работает слишком хорошо, возвращает true, если субъект равен 13, а цель содержит 1 или 3, а не только весь предмет сам. – mrpatg

+4

Нет, Патрик, это не так. взрыва строки примера, как в этом ответе, генерирует массив 'array ('8', '7', '13', '14', '16')'. – gnud

3
if (strpos(','.$string.',' , ','.$numberA.',') !== FALSE) { 
    //found 
} 

Примечания гвардия '' символы, которые помогут справиться с '13' магией '1, 2, 133' случая.

+1

Но как насчет конца, где у него нет запятой позади номера? – random

+0

Вот почему я также добавил запятую в строку стога сена :) – vava

+0

Nice. Мне почему-то никогда не приходило в голову, чтобы передать запятую оригинальной струне. Вместо этого я использовал регулярное выражение: F – gnud

-1

Простой поиск строк должен выполняться, если вы просто проверяете наличие строки. Я не говорю на php, но я думаю, что так оно и есть.

$mystring = '8,7,13,14,16'; 
$findme = '13'; 

if (preg_match('/(?>(^|[^0-9])'.$findme.'([^0-9]|$))/', $mystring)) { 
    $result = "Yeah, that number is in there"; 
} else { 
    $result = "Sorry."; 
} 
+2

простого поиска недостаточно. 13 - часть 113 :) – vava

+1

См. Ответ vava для правильного пути =) – gnud

+0

О да, я думаю, что это. Хм. Тогда я догадываюсь, что метод взорвать технику или, может быть, с помощью регулярного выражения будет более быстрым способом. – Jaskirat

4

Другой способ, который может быть более эффективным для laaaaaaaarge строк, использует регулярное выражение:

$numberA = "13"; 
$string = "8,7,13,14,16"; 

if(preg_match('/(^|,)'.$numberA.'($|,)/', $string)){ 
    $result = "Yeah, that number is in there"; 
} else { 
    $result = "Sorry."; 
} 
+0

Это также будет соответствовать «1,2,113'. – Gumbo

+0

Да, я забыл начальный условный. Теперь это работает. – gnud

+0

Путь vava, вероятно, немного быстрее. Если вы знакомы с регулярными выражениями, мой может быть более понятным, поскольку он описывает то, что мы принимаем, вместо изменения ввода. – gnud

1

Убедитесь, что вы сопрягать полный номер в строке, а не только часть его.

function numberInList($num, $list) { 
    return preg_match("/\b$num\b/", $list); 
} 
$string = "8,7,13,14,16";  
numberInList(13, $string); # returns 1 
numberInList(8, $string); # returns 1 
numberInList(1, $string); # returns 0 
numberInList(3, $string); # returns 0 
Смежные вопросы