如何检查是否在PHP中设置了密钥



如何检查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)

相关内容

最新更新