[英]in_array and isset give different results?
例如,我有这个json文件,其中有一些供用户使用的表元数据。
{
"id": {
"index": ["primary", "auto_increment"],
"unsigned": true,
"type": "integer"
},
"nick": {
"index": ["unique"],
"type": "varchar",
"minLength": 4,
"maxLength": 10
},
"pw": {
"type": "varchar",
"minLength": 4,
"maxLength": 10
}
}
我检查字段是否为索引以及它是什么类型的索引。
如果我在foreach中以这种方式进行检查
if (isset($value["index"]) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
我得到了预期的结果
Array
(
[0] => id
[1] => nick
)
但是如果我在foreach中这样做
if (in_array("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
我得到这个结果...
Array
(
[0] => id
)
这有点令人毛骨悚然。 有人知道为什么吗? 我不明白。 我认为* in_array-sample *必须与isset-sample相同
in_array
不检查键,它检查值。 isset
方法可以正常且快速地运行,或者您可以
if (array_key_exists("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
in_array("index", $value)
in_array具有第三个参数,用于检查类型,并且不进行松散比较。 并且由于您的第二个数组具有条目"unsigned": true
和"index" == true
为true。
采用:
in_array("index", $value, true);
而且您不会看到任何结果。 因为没有值是"index"
。
因此,请使用array_key_exists
或isset
检查,而不要使用仅检查值的in_array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.