为什么我这样做:
if(strpos("[","[rgeger]")){
echo 'hey';
}
它不打印任何东西?
尝试使用字符串:
function return_tags($keywords){
if($keywords){
$k_array = array();
foreach($this->check($keywords) as $key=>$value){
array_push($k_array, $value);
}
$last_array = array();
foreach($k_array as $key=>$value){
if(strpos("[", $value) && strpos("]", $value) && strlen($value) >= 2){
$value = '<span class="tag">'.$value.'</span>';
}
array_push($last_array, trim($value));
}
return $last_array;
}else{
return false;
}
}
字符串示例
$keywords = "freignferi eiejrngirj erjgnrit [llll] [print me as tag]";
你看到在html中打印了任何<span>
元素吗?
答案 0 :(得分:5)
看起来你交换了参数:
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
因此,如果您想知道字符串[
中是否有[rgeger]
:
if (strpos("[rgeger]", "[") !== false) {
echo 'hey';
}
(资料来源:http://php.net/strpos)
答案 1 :(得分:3)
返回的位置为零索引,因此第一个字符位于位置0.当将0评估为布尔值时,它为假 - 因此它不会进入块。
修复此问题:
if (strpos('[rgeger]', '[') !== false)
同样参数是错误的方式。不要再投票了这篇文章;去upvote robbi而不是发现那个:)鹰眼robbi,EAGLE眼睛:P
答案 2 :(得分:2)
因为你必须检查strpos()
的返回值,因为它可能为零因为[
它在索引零处,而零计算为FALSE这就是为什么它不会输入你的if块,所以检查返回值是否为FALSE并输入boolean,而不仅仅是整数0,如下所示:
if(strpos("[rgeger]","[") !== false){
echo 'hey';
}
<强>更新强>
参数的顺序也是错误的,主题字符串首先出现在搜索字符串中,我更新了上面的代码以反映出来。
答案 3 :(得分:1)
因为它错了。如果条件为假,Strpos会给出错误。
if(strpos("[rgeger]","[") !== false){
echo 'hey';
}
编辑:我已经纠正了我的回答。您的参数顺序错误。其:
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
答案 4 :(得分:0)
因为实际的strpos可以返回0,请参阅doc。
警告强> 此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
所以你必须直接与false
值进行比较。
if(strpos("[","[rgeger]") !== false){
echo 'hey';
}
编辑::
小心..看一下参数命令
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Haystack是字符串输入。 针是你正在寻找的。 p>
if(strpos("[regeger]","[") !== false){
echo 'hey';
}