PHP - 字符串包含

时间:2015-10-01 13:04:40

标签: php strpos

我有一个包含徽章对象的数组。我正在尝试删除与搜索条件不匹配的对象,此时条件是名称与搜索的字符串不匹配

我到目前为止的代码是

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

发生的事情是它从数组中删除所有对象,即使那些与字符串

匹配的对象也是如此

这是什么印刷

  

户外挑战 - 发布:户外

     

户外加挑战 - 发布:户外

     

户外挑战 - 发布:户外

     

户外挑战 - 发布:户外

     

Nights Away 1 - post:outdoor

     

第1年 - 发布:户外

     

Nights Away 5 - post:outdoor

2 个答案:

答案 0 :(得分:1)

如果您需要更宽松的匹配,请使用不区分大小写的函数或正则表达式:

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

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

在这些建议中,stristr是strstr的不区分大小写的版本,而/ i是正则表达式的不区分大小写的标志

答案 1 :(得分:0)

解决这个问题的一种方法如下:

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

strtolower()会将haystack和needle转换为小写字符串,现在搜索“string”也会匹配“String”。

您的原始问题是strpos()执行区分大小写的搜索('S'与's'不同)