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