PHP - 字符串包含

PHP - String contains

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

我目前的代码是

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

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

这是正在打印的内容

Outdoor Challenge -- post: outdoor

Outdoor Plus Challenge -- post: outdoor

Outdoor Challenge -- post: outdoor

Outdoor Challenge -- post: outdoor

Nights Away 1 -- post: outdoor

Year 1 -- post: outdoor

Nights Away 5 -- post: outdoor

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

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

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

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

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

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

strtolower() 会将 haystack 和 needle 都转换为小写字符串,现在您对 "string" 的搜索也将匹配 "String"。

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