任何人都可以解释为什么在PHP 5.2.9上这个语句的计算结果为true而不是false?
echo $value = '2010-01-01 12:30:45';
echo "<br>";
echo isset($value['everythingistrue']) ? 'TRUE' : 'FALSE';
答案 0 :(得分:10)
您无意中访问了字符串中的单个字符(第一个字符),确实已设置。
可以通过数字偏移访问单个字符,因此以下内容可以正常工作
$string = "abc";
echo $string[2], $string[1], $string[0]; // cba
在您的情况下,字符串'everythingistrue'
不是有效的字符串偏移量,因此使用正常的字符串到整数规则将其转换为数字:因此它变为0
。 $value[0]
已设置(它是第一个字符2
),因此isset()
调用返回true,导致您的三元操作评估为字符串TRUE
。
有关详细信息,请查看手册中的String access and modification by character。
答案 1 :(得分:4)
$ value是一个字符串。 你可以从这个$ value [0] - 第一个字符,$ value [4] - fift中获取字符。
如果您尝试获取'blablabla'字符,PHP会尝试将其转换为Int并且它会导致0 - 第一个字符为“2”。试试吧 - echo $value['everythingistrue']
答案 2 :(得分:0)
var_dump($value['everythingistrue'])
可能会消除您的疑虑