Php in_数组和isset给出不同的结果?
例如,我有一个json文件,其中为我的用户提供了一些表元数据Php in_数组和isset给出不同的结果?,php,arrays,Php,Arrays,例如,我有一个json文件,其中为我的用户提供了一些表元数据 { "id": { "index": ["primary", "auto_increment"], "unsigned": true, "type": "integer" }, "nick": { "index": ["unique"], "type": "varchar", "minLength": 4,
{
"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;
}
if (in_array("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
我得到了预期的结果
Array
(
[0] => id
[1] => nick
)
但是如果我在一个时间内这样做
if (isset($value["index"]) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
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;
}
在_数组中
不检查键,而是检查值。isset
方法运行良好且速度快,或者您可以
if (array_key_exists("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
$arr[] = $key;
}
in_数组还有第三个参数用于检查类型,并且不进行松散的比较。由于您的第二个数组具有条目“unsigned”:true
和“index”==true
为true
使用:
你不会看到任何结果。因为没有值是“index”
因此,请使用array\u key\u exists
或isset
检查,但不要在\u array中使用仅检查值的
in_数组还有第三个参数用于检查类型,并且不进行松散的比较。由于您的第二个数组具有条目“unsigned”:true
和“index”==true
为true
使用:
你不会看到任何结果。因为没有值是“index”
因此,请使用array\u key\u exists
或isset
检查,但不要在\u array
中使用仅检查值的