感谢那些插话的人...但我修改了原来的程序,现在更加困惑:
这是新代码:
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] =&gt; array(11){[“groupId”] =&gt; string(5)“25778”[“GroupName”] =&gt; string(9)“'1canoe2'”[“StylePatternColor”] =&gt; string(30)“A-7557-C”[“Price”] =&gt; string(4)“5.25”[“StandardPutUp”] =&gt; string(2)“15”[“Discount”] =&gt; string(3)“。25”[“ListPrice”] =&gt; string(3)“5.5”[“Quantity”] =&gt; string(1)“1”[“PromiseDate”] =&gt; string(10)“07/01/2014”[“DoNotShipBefore”] =&gt; string(10)“07/01/2014”[“Kit”] =&gt; string(5)“False”}}
看到Kit是“False”。然而,当我运行程序时的结果如下: 1对 3对 4真
这怎么可能?如果值为true(布尔值),则应该匹配1,如果值为false(布尔值),则应该匹配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"]);
我得到:Array([0] =&gt; Array([groupId] =&gt; 255 ... [Kit] =&gt; True))
1
简而言之,双等于确实找到了匹配,但三重不是吗?我本以为它恰恰相反。从我在这里读到的看来,更具体的应该是最不明确的。
为什么确切的等式失败但是double =找到匹配?
我已经读过这些差异,但我显然遗漏了一些基本的东西。提前谢谢。
最后一点,Kit,让我彻夜难眠。
答案 0 :(得分:1)
你的变量($ _SESSION [“cart_array”] [$ key] [“Kit”])似乎持有一个转换为true的值(如1,“true”[string]等)。
===检查类型是否相同,而==仅检查值。
看到你的var_dump后的更多说明: [ “试剂盒”] =&GT; string(5)“False”
您的变量“Kit”来自类型字符串。这意味着它是文本。 使用===,您可以检查它是否为布尔类型。哪个不是。因此结果=&gt;假。 但是,使用==,要比较的to变量首先转换为适合的变量,然后进行比较。如果将字符串“false”转换为布尔值,它将变为false,然后等于false =&gt;真。
您了解数据类型吗?如果没有,对于这种情况,值得一读。
答案 1 :(得分:1)
如果== false
是以下之一,则为$_SESSION["cart_array"][$key]["Kit"]
:
NULL,
'',
0,
false
只有当它包含true
时,它才会=== true