php中两个和三个等号之间的差异。。。。还是仅仅是我';你把它编错了?
感谢那些插话的人……但我修改了我原来的程序,现在更困惑了: 以下是新代码:php中两个和三个等号之间的差异。。。。还是仅仅是我';你把它编错了?,php,Php,感谢那些插话的人……但我修改了我原来的程序,现在更困惑了: 以下是新代码: 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["
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>";}
;}
?>
if($\u会话[“购物车数组”][$key][“Kit”]==true){echo“
1 true
”;}
如果($_会话[“购物车数组”][$key][“Kit”]=“true”){echo”
1b true
“;}
如果($_会话[“购物车数组”][$key][“Kit”]==false){echo“2 True
”;}
如果($_会话[“购物车数组”][$key][“Kit”]=“False”){echo“3 True
”;}
如果($_会话[“购物车数组”][$key][“Kit”]==True){echo“4 True
”;}
如果($_会话[“购物车数组”][$key][“Kit”]==False){echo“5 True
”;}
;}
?>
为了简单起见,我创建了一个只有一行的数组。Var_转储如下所示:
数组(1){[0]=>数组(11){[“groupId”]=>字符串(5)“25778”[“GroupName”]=>字符串(9)”'1Cano2'[“StylePatternColor”]=>字符串(30)“A-7557-C”[“Price”]=>字符串(4)“5.25”[“StandardPutUp”]=>字符串(2)“15”[“折扣”=>字符串(3)”.25”[“ListPrice”]=>字符串(3)”5.5.5”[“数量”=>字符串(1)“1”[“日期”=>字符串(2014/07)”[“donotshipplefore”]=>string(10)“07/01/2014”[“Kit”]=>string(5)“False”}
看到Kit是“False”,但我运行程序时的结果如下:
1正确
3正确
4正确
这怎么可能呢?如果值为真(布尔值),则1应该匹配,如果值为假(布尔值),则3应该匹配,如果值为真(布尔值,我想测试大小写敏感度),则4应该匹配。总之,“假”匹配但为假(布尔值)没有。注意,这些都是用==,而不是==。怎么会呢?再次感谢你的输入。我正在发疯
我很难理解如何在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"]);
会话_start();打印_r($_会话[“购物车数组]);
我得到:Array([0]=>Array([groupId]=>255…[Kit]=>True))
一,
简言之,双等分确实找到了匹配项,但三等分却没有找到匹配项?我本以为会正好相反。从我在这里读到的内容来看,更具体的应该具有最少的模糊性
为什么精确相等失败,而double=找到匹配
我已经读到了这些差异,但我显然遗漏了一些基本的东西。提前谢谢
最后一位Kit让我彻夜未眠。您的变量($\u SESSION[“cart\u array”][$key][“Kit”])似乎包含一个转换为true的值(如1、“true”[string]等)
==检查类型是否相同,而==仅检查值
查看您的var_转储后的更多说明:
[“Kit”]=>字符串(5)“False”
变量“Kit”来自类型string。这意味着它是文本。
With==检查它是否为布尔类型。布尔类型不是。因此结果=>false。
但是,要比较的to变量首先转换为任何合适的变量,然后进行比较。如果将字符串“false”转换为布尔值,它将变为false,然后等于false=>true
你知道数据类型吗?如果不知道,在这种情况下值得一读。如果
==false
如果$\u会话[“购物车数组”][$key][“Kit”]
是下列之一:
NULL,
'',
0,
false
只有当它包含
true
时,它才会==true
数组显示为包含文本“true”,而不是布尔值“true”“。您可以这样说,因为print\u r实际上会显示1表示true,而不是文本。如果改用var_dump,它还将显示类型。这与数组无关。这只是关于比较文本变量和布尔变量的问题。“我在理解如何在php中计算数组变量时遇到困难。”你不会孤单,搜索php真值表——把它钉在墙上。然后想想,来自GET/POST的所有内容都是一个字符串。然后在每个条件分叉之前,对每个var临时执行var_dump()。那么,如果var_转储显示:[“Kit”]=>string(5)“False”,为什么“$\u会话[“cart_数组”][$key][“Kit”]==true”和==False都返回true?然而,==“False”是False吗?很抱歉说得太多…谢谢你的帮助。我不确定。但这可能是因为只有“false”和“false”(甚至不确定第二个)被转换为布尔值,而“false”没有被转换,因此它是真的,因为字符串是真的。