Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php代码中if语句中的意外行为_Php_Javascript - Fatal编程技术网

php代码中if语句中的意外行为

php代码中if语句中的意外行为,php,javascript,Php,Javascript,调用php代码的html文件中的控制台在执行php代码时显示以下结果: php处理:调试3:测试IF:in IF php处理:调试4:错误 但是,我希望第一个控制台结果是php处理:debug 3:testif:in-ELSE。例如,根据控制台,似乎执行了if-else语句的错误(if)部分,我不明白为什么(对于这个非常简单的代码) 有什么建议吗 Php代码: //TEST CODE if($productselected_form[0] == true) { $response_arr

调用php代码的html文件中的控制台在执行php代码时显示以下结果:

php处理:调试3:测试IF:in IF

php处理:调试4:错误

但是,我希望第一个控制台结果是
php处理:debug 3:testif:in-ELSE
。例如,根据控制台,似乎执行了if-else语句的错误(if)部分,我不明白为什么(对于这个非常简单的代码)

有什么建议吗

Php代码:

//TEST CODE
if($productselected_form[0] == true)
{
    $response_array['debug3'] = 'TEST IF: in IF';
}
else
{
    $response_array['debug3'] = 'TEST IF: in ELSE';
}
$response_array['debug4'] = $productselected_form[0];

//send the response back
echo json_encode($response_array);
//END TEST CODE
Javascript代码(对php代码的ajax调用中的console.log):


问题是您正在将字符串值与布尔值进行比较,而布尔值的计算结果总是为true。你应该像这样比较字符串

//TEST CODE
if($productselected_form[0] == 'true')

问题是您正在将字符串值与布尔值进行比较,而布尔值的计算结果总是为true。你应该像这样比较字符串

//TEST CODE
if($productselected_form[0] == 'true')

您的
$productselected\u表单[0]
可能是一个字符串,而不是布尔值。当使用
==
时,PHP会转换类型以便比较它们

我猜你有
'false'
,而不是
false
。转换为布尔值时,以下字符串为
false

  • “0”
  • ''(空字符串)
其他任何内容都是
正确的
。因此,当您执行
$productselected\u form[0]==true
时,您实际上执行的是
'false'==true
,其计算结果为
true


要将
'false'
转换为
false
,可以执行以下操作:

$productselected_form[0] = ($productselected_form[0] === 'true');

您的
$productselected\u表单[0]
可能是一个字符串,而不是布尔值。当使用
==
时,PHP会转换类型以便比较它们

我猜你有
'false'
,而不是
false
。转换为布尔值时,以下字符串为
false

  • “0”
  • ''(空字符串)
其他任何内容都是
正确的
。因此,当您执行
$productselected\u form[0]==true
时,您实际上执行的是
'false'==true
,其计算结果为
true


要将
'false'
转换为
false
,可以执行以下操作:

$productselected_form[0] = ($productselected_form[0] === 'true');

那么,
$productselected\u form[0]
的值是多少?或者我们应该猜测一下吗?
$productselected\u form
包含什么?进行
var\u dump($productselected\u form[0])
以准确查看您的测试对象。由于您使用的是简单的
==
相等测试,PHP可以根据需要自由地进行类型转换/转换,许多东西都可以测试为
true
。正如帖子所说,
$productselected\u form[0]
包含
false
@MarcB,请看debug4行。它被连载为假的。除了false之外,json编码中还有什么东西可以序列化为false吗?那么,
$productselected\u form[0]
的值是多少,或者我们应该猜测一下吗?
$productselected\u form
包含了什么?执行
var\u dump($productselected\u form[0])
以查看您的测试内容。由于您使用的是简单的
==
相等测试,PHP可以根据需要自由地进行类型转换/转换,许多东西都可以测试为
true
。正如帖子所说,
$productselected\u form[0]
包含
false
@MarcB,请看debug4行。它被连载为假的。在json_编码中,除了false之外,还有什么东西可以序列化为false吗?今天很多人都很讨厌它。。。。将您的答案与@RocketHazmat的答案进行比较。当然你说得对,但这不是一个真正的答案,不能给出任何解释或任何东西。是的,我应该补充一个事实,他正在比较一个字符串值和一个布尔值,这个布尔值将始终计算为true。感谢所有的评论和建议。我确实用了“假”而不是假-(今天有很多仇恨者,看起来……将你的答案与@RocketHazmat的答案进行比较。当然,你说得对,但这不是一个真正能给出任何解释或任何东西的答案。是的,我应该补充一个事实,他正在将字符串值与布尔值进行比较,布尔值将始终计算为true。感谢所有的评论和建议。我确实用了“假”而不是假-(