我有一个包含徽章对象的数组。我正在尝试删除与搜索条件不匹配的对象,此时条件是名称与搜索的字符串不匹配
我到目前为止的代码是
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
答案 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'不同)