0

如果我这样做,为什么会这样:

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]";

你看到任何<span>用 html 打印的元素了吗?

4

5 回答 5

5

看起来你交换了论点:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

因此,如果您想知道 a[是否在您的字符串中[rgeger]

if (strpos("[rgeger]", "[") !== false) { 
  echo 'hey'; 
}

(来源: http: //php.net/strpos

于 2012-11-03T20:34:52.967 回答
3

返回的位置是零索引的,因此第一个字符位于位置 0。当将 0 评估为布尔值时,它是错误的 - 所以它不会进入块。

修复这个:

if (strpos('[rgeger]', '[') !== false)

论点也是错误的不要再点赞这个帖子了;去投票 robbi's 而不是发现那个 :) Eagle eyes robbi,EAGLE eyes :P

于 2012-11-03T20:32:05.033 回答
2

因为您必须检查它的返回值,strpos()因为它可能为零,因为[它的索引为零,而零的计算结果为 FALSE,这就是它不会进入您的 if 块的原因,因此请检查返回值是否为 FALSE 并输入布尔值,而不仅仅是整数零,像这样:

if(strpos("[rgeger]","[") !== false){ 
  echo 'hey'; 
}

更新:
参数的顺序也错误,主题字符串先出现,然后是搜索字符串,我更新了上面的代码以反映这一点。

于 2012-11-03T20:31:45.530 回答
1

因为错了。如果条件为假,则Strpos给出假。

if(strpos("[rgeger]","[") !== false){ 
    echo 'hey'; 
}

编辑:我已经更正了我的答案。您的参数顺序错误。它的:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
于 2012-11-03T20:32:13.317 回答
0

因为实际上 strpos 可以返回 0 请参阅doc

警告 此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

所以你必须直接与false价值进行比较。

if(strpos("[","[rgeger]") !== false){ 
  echo 'hey'; 
}

编辑 ::

小心..查看参数顺序

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Haystack 是字符串输入。针是您正在寻找的东西。

if(strpos("[regeger]","[") !== false){ 
  echo 'hey'; 
}
于 2012-11-03T20:34:00.407 回答