如何检查PHP 中是否设置了数组的键
我该如何区分两者?
$a = [
'a' => ['key' => 'value'],
['key' => 'value']
];
$a = [
'a' => ['key' => 'value'],
'0' => ['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开始。
使用array_key_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)