我有这段代码:
echo ( $arr['process_refunds'] == 'storecredit' ) ? 'true' : 'false'
$arr['process_refunds']
中的值为0
类型int(0)
。
它在php -a
中尝试过,如果我们将任何字符串与之比较
==
int(0)
true
评估为 values = [
(1, "David", 501, 2018, "English"),
(2, "Nancy", 501, 2018, "English"),
(3, "Shyam", 502, 2018, "Hindu"),
]
df = sqlContext.createDataFrame(values, ['Id', 'PersonName', 'Dept', 'year', 'Language'])
。
为什么?
答案 0 :(得分:5)
这是因为==
是一个松散类型的比较运算符。它将您的字符串转换为数字,因此它的计算结果为true。尝试使用===
。
您的字符串将转换为零,因为它以字母开头。
答案 1 :(得分:3)
我认为很明显松散的比较并没有返回预期值。你可以在这里看到比较表(第二张表)
http://php.net/manual/en/types.comparisons.php
您可以看到这是预期行为。这是因为php在进行评估之前将字符串"php"
或"somestr"
转换为匹配数字类型,使其等于0。
除非您有其他类型/条件需要与松散的比较相匹配,否则您应该使用===
来确保您具有匹配类型。
答案 2 :(得分:1)
首先:
php -r "echo ( $arr['process_refunds'] == 'storecredit' ) ? 'true' : 'false';"
打印:
false
很明显因为$arr
未定义。但如果它的值为0则
php -r "echo ( 0 == 'storecredit' ) ? 'true' : 'false';"
打印:
true
因为0
和'storecredit'
都转换为整数。
(int)'storecredit'的值为0,因为它在字符串的开头不包含任何数字。例如,字符串'4ss'将转换为4。
答案 3 :(得分:0)
你不需要使用===因为这样你比较两个值是相同的类型和相同的内容;示例
echo 0 === 'somstr'; // returns false
echo 0 == 'somstr'; //return true