簡體   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