2015-01-25 4 views
2
$row['solved']= "12|10|3"; 
$id=10; 
$pos = strpos($row['solved'], $id); 
if ($pos !== false){ 
    echo "String found!";  
    exit; 
} 
echo "String not found!"; 

Почему это всегда возвращает «String not found»?Строка не найдена, хотя она должна

+3

[ «Если игла не является строкой, он преобразуется в целое число и применяется как порядковое значение символа.»] (HTTP: // PHP. net/manual/en/function.strpos.php # refsect1-function.strpos-parameters) – sjagr

+0

@ Rizier123 не очень ... –

+0

@sjagr Это действительно должен быть ответ, а не комментарий. –

ответ

4

В соответствии с PHP docs:

Если needle не является строкой, он преобразуется в целое число и применяется как порядковое значение символа.

Вашего $id аргумент является целым числом, и, соответственно, использовать в качестве ordinal value of the character (обычно значения ASCII.) В этом случае значение ASCII 10 является представителем \n символа перевода строки, так что вы ищете $row['solved'] для этого, который в этом конкретном значении $row['solved'] не будет найден.

Чтобы это исправить, используйте:

$pos = strpos($row['solved'], (string)$id); 
+0

Я бы поднял это, если бы объяснил это значение так, как понял бы новичок. – Jon

+0

Я бы поднял это, если бы у меня хватило репутации, чтобы сделать это, спасибо! – MarkusK96

+0

@ MarkusK96 Через 10 минут вы можете принять его, этого достаточно. Приветствия :) – sjagr