2015-10-01 7 views
0

У меня есть массив, содержащий объекты значков. Я пытаюсь удалить объекты, которые не соответствуют критериям поиска, в данный момент критерии, если имя не соответствует искала строкуPHP - String содержит

кодом я до сих пор является

 foreach ($badgeList as $key=>$badge) { 
      $check = strpos($badge->getName() , $_POST['name']); 
      if($check === false) { 
       unset($badgeList[$key]); 
       print "<br/>" . $badge->getName() . " -- post: " . $_POST['name']; 
      } 
     } 

Что происходит это его удалить все объекты из массива, даже те, которые соответствуют строке

Это, что печатаемого

открытый вызов - пост: открытый

Открытый Plus Challenge - пост: открытый

Открытый Challenge - пост: открытый

Открытый Challenge - пост: открытый

ночи Away 1 - пост: открытый

Год 1 - должность: наружная

Nights Away 5 - post: outdoor

+2

Try http://php.net/manual/en/function.stripos. PHP. 'outdoor'! =' Outdoor', когда подходит кейс. – chris85

ответ

1

Если вам нужно более рыхлое соответствие, используйте регистрозависимость функцию или регулярное выражение:

stristr($badge->getName() , $_POST['name']) 

или

if(! preg_match("/" . $_POST['name'] . "/i",$badge->getName())) { 

В этих предложениях stristr является регистронезависима версией strstr и/я это чувствительно к регистру флаг для регулярных выражений

0

Одним из способов решения, это будет следующим образом:

$check = strpos(strtolower($badge->getName()) , strtolower($_POST['name'])); 

strtolower() преобразует как стог сена, так и иглу в строчные строки, и теперь ваш поиск «строки» также будет соответствовать «String».

Ваш оригинальный вопрос, что StrPos() делает чувствительно к регистру поиск ('S' не то же самое, как 'с')