0

在 CentOS 上的 PHP 5.3.10 中测试。

在脚本中运行:

$test = "62 3/4";

if($pos = strpos($test,' ') !== false) {
  $test= substr($test,0,$pos); // use $pos
}
// $test is "6"

在另一个独立的脚本中,我运行:

if($pos = strpos($test,' ') !== false) {
  $test = substr($test,0,strpos($test,' ')); // redo substr calculation
}
// $test is "62"

$pos 应该是 2(第三个字符是空格,从零开始,0,1,2),所以 $test 都应该是“62”,不是吗?

4

3 回答 3

3

运算符优先!!==出现在前面=,所以测试有效地变成了

if($pos = (strpos($test,' ') !== false))

这将评估为真或假,而不是字符串位置。

始终使用显式括号:

if(($pos = strpos($test,' ') !== false)
于 2012-09-19T04:51:33.433 回答
1

你要

if( ($pos = substr($test, ' ')) !== false ) {
    // ...
}

请参阅PHP 运算符优先级

于 2012-09-19T04:53:04.113 回答
0

还要考虑在第二个 if 中,变量 $test 的值已经被第一个更改了: $test= substr($test,0,$pos);

于 2012-09-19T05:00:20.073 回答