Php 在if上的奇怪行为变成了for

Php 在if上的奇怪行为变成了for,php,Php,我有以下代码: for($nrt=0; $nrt<$actualline; $nrt++) { echo $sidesIndexes[$nrt]." - ".$nrt."<br/>"; if($sidesIndexes[$nrt]==$nrt) { echo "am I in??? ".$sidesIndexes[$nrt]." is different than ".$nrt."<br/>"; } } 我累了吗?怎么可能得

我有以下代码:

for($nrt=0; $nrt<$actualline; $nrt++) {
    echo $sidesIndexes[$nrt]." - ".$nrt."<br/>";
    if($sidesIndexes[$nrt]==$nrt) {
        echo "am I in??? ".$sidesIndexes[$nrt]." is different than ".$nrt."<br/>";
    }
}
我累了吗?怎么可能得到我在哪里与0不同消息

在php中,'#'==0解析为true


了解更多信息:我假设这是PHP,因为它看起来像。Zero在PHP中的计算结果有很多。在本例中,它看起来像0==null。要在同时检查类型的情况下进行强相等比较,请使用==

0 == null // true
0 == false // true
0 == 0 // true

0 === null // false
0 === false // false
0 === 0 // true

0与PHP中的false相同。字符“#”在PHP中不正确。因此,您要问的是false==false,它是这样做的。

在进行比较时,会给出0

那么是的,0==0

您应该使用==与检查变量类型进行比较:

if($sidesIndexes[$nrt] === $nrt) {

只有当两个变量都是同一类型(如整数、字符串等)时,这才是真的。

如果尝试根据类型进行比较,则应使用===运算符 如果($SidesIndex[$nrt]=$nrt){ .... }

指数的复数形式是指数 一边你指的是站点吗?

在PHP(以及其他松散类型的语言,如Javascript)中,使用双等运算符比较两个不同类型的变量时存在一个主要问题

这两个变量是不同的类型,但是PHP只能比较相同类型的实体,因此当它看到比较的尝试时,它会自动转换实体,使它们具有相同的类型

这样做的结果是,如果将字符串值
“#”
与数字零进行比较,它将在进行比较之前将字符串转换为数字。由于这会导致数值为零值,因此它等于它所比较的数值零,从而导致
if()
条件返回true

在某些情况下,这实际上是期望的效果——例如,从
$\u POST
等浏览器进入PHP的所有数据都将是字符串,即使它实际上可能是数字数据

然而,在许多情况下,double-equal的隐式类型转换是一个主要问题

解决这个问题的方法是使用三重相等运算符-
=

这与double equal运算符的工作原理完全相同,只是它不首先执行类型转换。如果类型不同,则它总是返回false

因此,如果三重相等,则包含数字
“2”
的字符串将不等于整数值2,也不等于浮点值2.00。但有了双重平等,他们就都平等了


在您的情况下,需要使用tripple equal运算符。两者都有各自的用途,您应该使用适合于任何给定情况的任何一种。

@Daniel A.White
var_dump((整数)#')
is
int(0)
。PHP试图通过将值转换为公共类型来评估比较操作。在本例中,为整数。由于(string)#转换为(integer)0,此操作的结果为true。我认为字符串“#”正在转换为数值(它给出0)而不是布尔值。明白了。那么0==0仍然是真的。如果您不希望“#”==0为真,则三重相等仍然适用于您。不,它不会为真,但这意味着“#”==0不是真的。使用
==
并不能神奇地改变
==
的含义。@托马拉克,这就是我说的:'#'===0//false,而'#'==0//true
if($sidesIndexes[$nrt] === $nrt) {