Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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/3/arrays/12.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中检查键是否已设置_Php_Arrays - Fatal编程技术网

如何在PHP中检查键是否已设置

如何在PHP中检查键是否已设置,php,arrays,Php,Arrays,如何在PHP中检查数组的键是否已设置 我如何区分两者之间的区别 $a = [ 'a' => ['key' => 'value'], ['key' => 'value'] ]; 区别在于第一个没有索引号 但是默认值是0(['key'=>'value']) 但是第二个有0个索引('0'=>['key'=>'value']) 注意:检查键是否为数字数组没有意义,因为用户可能会给出数字。您的问题没有答案,因为这两个数组没有区别:

如何在PHP中检查数组的键是否已设置

我如何区分两者之间的区别

$a = [
          'a' => ['key' => 'value'],
          ['key' => 'value']
        ];
区别在于第一个没有索引号 但是默认值是0(['key'=>'value']) 但是第二个有0个索引('0'=>['key'=>'value'])


注意:检查键是否为数字数组没有意义,因为用户可能会给出数字。

您的问题没有答案,因为这两个数组没有区别:它们只是书写同一事物的不同方式

为了理解我的意思,请考虑这个问题:

如何区分整数
1+3
和整数
2+2
之间的差异

当您查看
$a=1+3的源代码时
$a=2+2您可以看到差异;但是,当PHP执行该代码时,在这两种情况下都会分配值
4
。您不能编写代码来检查
$a
并找出为什么它是4,或者它是如何计算的

显示的两个数组文本也是如此。虽然它们在源代码中看起来不同,但一旦执行,PHP将在这两种情况下分配相同的数组值

“规范”版本实际上如下所示:

$a = [
   'a' => ['key' => 'value'],
   0 => ['key' => 'value']
];
字符串
'0'
被视为与整数
0
相同的键,未写入索引的条目从0开始按顺序分配整数索引。

使用数组\u key\u exists()可以检查键是否存在

$a = [
          'a' => ['key' => 'value'],
          ['key' => 'value']
        ];

var_dump(array_key_exists('0',$a));
//bool(true)

var_dump(array_key_exists(0,$a));
//bool(true)
键0的存在是因为上述代码只是

$a2 = [
          'a' => ['key' => 'value'],
          '0' => ['key' => 'value']
        ];
如果键是一个数字,则它始终存储为整数

foreach($a2 as $key => $val){
  var_dump($key);
}   
// string(1) "a" 
// int(0)
阵列也可以直接进行比较。严格的比较还表明$a和$a2是相同的

var_dump($a === $a2); //bool(true)

您的意思是第二个索引可能没有
0
?目前这些都是相同的。当您使用
==
比较这两者时,会得到什么结果?如果它们没有被标记为不同,那么你的问题背后的假设是有缺陷的。如果你注意问题的最后一点,就会提到用户可能自己选择了0键,因此通过检查数组的索引是否存在,我们无法确定在数字索引的情况下,它是由用户或PHP自动选择设置的。我的目的是证明这一点。只是拼写不同而已。我也不能用PHP判断$arr=array();或$arr=[];这是我写的。
var_dump($a === $a2); //bool(true)