繁体   English   中英

in_array和isset给出不同的结果?

[英]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_existsisset检查,而不要使用仅检查值的in_array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM