[英]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.