php中两个和三个等号之间的区别.还是只是我编码错了


The difference between two and three equal signs in php.... or is it just I've coded it wrong?

感谢那些插话的人...但是我修改了原来的程序,现在更加困惑:

下面是新代码:

        if ($_SESSION["cart_array"][$key]["Kit"]==true) {echo "<br>1 True<br>";}
        if ($_SESSION["cart_array"][$key]["Kit"]=="true") {echo "<br>1b True<br>";}
        if ($_SESSION["cart_array"][$key]["Kit"]==false){echo "2 True<br>";}
        if ($_SESSION["cart_array"][$key]["Kit"]=="False"){echo "3 True<br>";}
        if ($_SESSION["cart_array"][$key]["Kit"]==True){echo "4 True<br>";}
        if ($_SESSION["cart_array"][$key]["Kit"]==False){echo "5 True<br>";}

    ;}
    ?>

为简单起见,我创建了一个只有一行的数组。 Var_dump如下: array(1

) { [0]=> array(11) { ["groupId"]=> string(5) "25778" ["GroupName"]=> string(9) "'1canoe2'" ["StylePatternColor"]=> string(30) "A-7557-C " ["Price"]=> string(4) "5.25" ["StandardPutUp"]=> 字符串(2) "15" ["折扣"]=> 字符串(3) ".25" ["标价"]=> 字符串(3) "5.5" ["数量"]=> 字符串(1) "1" ["承诺日期"]=> 字符串(10) "07/01/2014" ["DoNotShipBefore"]=> 字符串(10) "07/01/2014" ["工具包"]=> 字符串(5) "假" } }

看到套件是"假的"。 然而,当我运行该程序时,结果如下:1 真3 真4 真

这怎么可能? 如果值为真(布尔值),则 1 应该匹配,如果值为假(布尔值),则 3 应该匹配,如果 True(布尔值,我想测试区分大小写),则 4 应该匹配。 无论如何,"False"匹配,但False(布尔值)不匹配。 而且,请注意,这些都是 ==,而不是 ===。 怎么来了? 再次感谢您的输入。 我正在扯头发。

我无法理解如何在 php 中计算数组变量。

<?php
session_start(); 
print_r($_SESSION["cart_array"]);
$NumberOfLineItems = count($_SESSION["cart_array"]);
for ($key=0; $key<$NumberOfLineItems; $key++) {
    if ($_SESSION["cart_array"][$key]["Kit"]==true) {echo "<br>1 <br>";}
    if ($_SESSION["cart_array"][$key]["Kit"]==false){echo "2 <br>";}
    if ($_SESSION["cart_array"][$key]["Kit"]===true){echo "3 <br>";}
    if ($_SESSION["cart_array"][$key]["Kit"]===false){echo "4 <br>";}
;}
?>
    session_start(); Print_r($_SESSION["cart_array"]); 
我得到: 数组 ( [0] =>

数组 ( [组 ID] => 255...[套件] => 真 )

1

简而言之,双等号

确实找到了匹配项,但三等号没有? 我本以为情况恰恰相反。 从我在这里读到的内容来看,似乎更具体的应该有最少的歧义。

为什么精确相等失败,但 double= 找到匹配?

我已经阅读了有关差异的信息,但我显然缺少一些基本的东西。 提前谢谢。

最后一点,Kit,让我彻夜难眠。

如果

$_SESSION["cart_array"][$key]["Kit"]是以下之一,则会== false

NULL, 
'', 
0,
false

只有当它包含true时,它才会=== true

你的变量($_SESSION["cart_array"][$key]["Kit"])似乎包含一个转换为true的值(如1,"true"[字符串]等)。

=== 检查类型是否相同,而 == 只检查值。

看到您的var_dump后,请说明更多内容: ["工具包"]=> 字符串(5) "假"

您的变量"Kit"来自字符串类型。这意味着它是文本。使用 === 检查它是否为布尔类型。哪个不是。因此结果 => 假。但是,使用 == 时,要比较的 to 变量首先转换为合适的变量,然后进行比较。如果将字符串"false"转换为布尔值,它将变为false,然后等于false => true。

您了解数据类型吗?如果没有,对于这种情况,值得一读。