Проверьте, содержит ли строка определенное число - PullRequest
3 голосов
/ 12 октября 2009

У меня есть строка

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.";
}

В поисках магии.

Ответы [ 5 ]

20 голосов
/ 12 октября 2009
<?php 
in_array('13', explode(',', '8,7,13,14,16'));
?>

… вернет, находится ли «13» в строке.

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

4 голосов
/ 12 октября 2009

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

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

if(preg_match('/(^|,)'.$numberA.'($|,)/', $string)){
    $result = "Yeah, that number is in there";
} else {
    $result = "Sorry.";
}
3 голосов
/ 12 октября 2009
if (strpos(','.$string.',' , ','.$numberA.',') !== FALSE) {
    //found
}

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

1 голос
/ 12 октября 2009

Убедитесь, что вы соответствуете целому числу в строке, а не только ее части.

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
0 голосов
/ 12 октября 2009

Простой поиск строки следует выполнить, если вы просто проверяете наличие строки. Я не говорю на 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.";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...