Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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 in_数组和isset给出不同的结果?_Php_Arrays - Fatal编程技术网

Php in_数组和isset给出不同的结果?

Php in_数组和isset给出不同的结果?,php,arrays,Php,Arrays,例如,我有一个json文件,其中为我的用户提供了一些表元数据 { "id": { "index": ["primary", "auto_increment"], "unsigned": true, "type": "integer" }, "nick": { "index": ["unique"], "type": "varchar", "minLength": 4,

例如,我有一个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;
}
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
中使用仅检查值的