下面是我正在查看的代码。
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)),但为什么要这样做呢?
发布于 2009-03-30 23:56:46
答案是在PHP中,一个"false“值可以由几个值来满足,比如一个空数组、一个空字符串、一个NULL、一个整数0等等。
因此,这总是会产生不正确的结果:
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
发布于 2009-03-30 23:57:48
stripos返回一个字符串在另一个字符串中的位置,如果没有找到该字符串,则返回false,因此建议使用identity comparison operators (===,!==),因为PHP将0视为"falsy“值,请考虑以下示例:
// 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"发布于 2009-03-31 00:05:05
在PHP中,!==的意思是不同的类型和值。
如果stripos()返回的不是false (且恰好是'false',而不是零),则表示它找到了什么,即使位置为0并返回int(0)也是如此。在与==进行标准比较时,0和false相等,但在使用identity ===运算符时不相等,因此要确定()是否找到某些内容,唯一的方法是使用!==比较stripos()的值和类型(不完全相同,即strpos()返回值的类型和值相同)。
https://stackoverflow.com/questions/699507
复制相似问题