Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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如果内部foreach错误_Php_Foreach - Fatal编程技术网

php如果内部foreach错误

php如果内部foreach错误,php,foreach,Php,Foreach,我有一个问题,如果内部foreach。 代码的答案必须是“相等”,但必须是“相等” 这是我的密码 $list=array( "X" => "X", "0" => "0", "2" => "2", "3" => "3" ); $var="X"; foreach ($list as $key => $val){ if ($var==$key) { echo 'Equal';

我有一个问题,如果内部foreach。 代码的答案必须是“相等”,但必须是“相等”

这是我的密码

$list=array(
    "X"     => "X",
    "0"     => "0",
    "2"     => "2",
    "3"     => "3"
);

$var="X";

foreach ($list as $key =>  $val){

    if ($var==$key) {
        echo 'Equal';        
    }

}
使用:

您需要
==
,因为
var\u dump($var==0)
返回true,这在类型转换之后

var_dump('X' == 0);//true
参考-
http://php.net/manual/en/language.operators.comparison.php

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换因为这涉及到比较类型和值

$a == $b    Equal   TRUE if $a is equal to $b after type juggling.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type.

所以,试着用“==”而不是“==”

你到底想要什么?想知道为什么结果是相等的,只有一个数组元素的键是“X”,所以它应该是相等的。为什么不在数组中()相同的键和值呢?我的答案符合OP的要求,而且很实用。这是答案,但请解释为什么它是答案。(我没有投反对票)有时类型杂耍真的是违反直觉的澄清==是一种松散的比较语法,它会将变量转换为多个类型“类型杂耍”,因此如果将(int)1与(string)1进行比较,您将得到一个真实的返回。使用===运算符不会键入juggle,但会返回精确匹配。将(int)1与(string)1进行比较将返回false,因此建议在比较字符串时使用==。很明显是的,但是如果$var来自$\u GET variable,那么“===”不起作用如果form GET,同样的情况会发生吗?
$a == $b    Equal   TRUE if $a is equal to $b after type juggling.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type.