首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要使用!php FALSE来检查==中的stripos?

为什么要使用!php FALSE来检查==中的stripos?
EN

Stack Overflow用户
提问于 2009-03-30 23:51:23
回答 5查看 35.8K关注 0票数 18

下面是我正在查看的代码。

代码语言:javascript
复制
foreach ($header as $idx => $field) {
    if (stripos($field, 'foo') !== false) {
        $cols['foo'] = $idx;
    } else if (stripos($field, 'bar') !== false) {
        $cols['bar'] = $idx;
    } else if (stripos($field, 'brr') !== false) {
        $cols['brr'] = $idx;
    } else if (stripos($field, 'ffo') !== false) {
        $cols['ffo'] = $idx;
    }
}

对不起,也不知道如何很好地格式化代码,任何关于这方面的提示都将不胜感激。

我正在看一些比我聪明得多的人写的代码,所以我不倾向于相信我的第一印象就是把所有东西都改成if(stripos($foo)),但为什么要这样做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-30 23:56:46

答案是在PHP中,一个"false“值可以由几个值来满足,比如一个空数组、一个空字符串、一个NULL、一个整数0等等。

http://php.net/empty

因此,这总是会产生不正确的结果:

代码语言:javascript
复制
if(strpos("abc", "a")) { 
  echo "Yes";
} else {
  echo "No";
}

由于"a“出现在第一个位置(索引0),因此PHP认为"if (0)”为false。

当strpos没有在您的海量数据中找到指针时,它将返回布尔值FALSE,这是您想要使用三等式操作符检查的内容,该操作符同时检查类型和值。请参阅有关比较运算符的文档

http://www.php.net/manual/en/language.operators.comparison.php

票数 52
EN

Stack Overflow用户

发布于 2009-03-30 23:57:48

stripos返回一个字符串在另一个字符串中的位置,如果没有找到该字符串,则返回false,因此建议使用identity comparison operators (===,!==),因为PHP将0视为"falsy“值,请考虑以下示例:

代码语言:javascript
复制
// Find the position of the 'a' character in the 'abc' string:
stripos('abc', 'a') !== false; // true, position is 0
stripos('abc', 'a') != false; // false, 0 is "falsy"
票数 9
EN

Stack Overflow用户

发布于 2009-03-31 00:05:05

在PHP中,!==的意思是不同的类型和值。

如果stripos()返回的不是false (且恰好是'false',而不是零),则表示它找到了什么,即使位置为0并返回int(0)也是如此。在与==进行标准比较时,0和false相等,但在使用identity ===运算符时不相等,因此要确定()是否找到某些内容,唯一的方法是使用!==比较stripos()的值和类型(不完全相同,即strpos()返回值的类型和值相同)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/699507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档