结合strpos!== false和pos<

时间:2013-10-02 08:52:08

标签: php strpos

有没有办法合并

 if ((strpos($str,"abc") !== false) and (strpos($str,"abc") < 1000))

或者我需要两个ifs吗? 因为如果字符串中没有abc,则位置为-1,因此小于1000。

我只对php有一些特殊问题感兴趣;)

这是:

if (strpos(substr($str,0,1000),"abc") !== false) 

这是一个好方法吗?

3 个答案:

答案 0 :(得分:2)

$pos_abc = strpos($str, 'abc');
if ($pos_abc !== false && $pos_abc < 1000)

你想测试两件不同的东西:1-是字符串中的abc?并且2-是该字符串的前1000个字符中的abc。 虽然可以在一次测试中重写它,但它没有任何好处,而且实际上代码的清晰度会很高。

答案 1 :(得分:0)

如果您愿意,可以尝试:

if( in_array(strpos($str,"abc"),range(0,1000),true))

然而,它看起来并不简单,而且性能成本非常高。

也许最好的方法是使用变量:

$pos = strpos($str,"abc");
if( $pos !== false && $pos < 1000) ...

答案 2 :(得分:0)

两个问题:

  • 你的双重支柱
  • 比较(2.和运算符)取决于第一个,这可能会导致问题(例如,在以后的php版本中)

更新:

漂亮而快速的解决方案模式:

if(($pos = strpos($str,"abc") !== false)?($pos < 1000):false)

漂亮而干净的解决方案模式:

$pos = strpos($str,"abc");
if(($pos !== false)?($pos < 1000):false)