[英]array_key_exists error baffling
這很可能不是可以通過復制和粘貼來復制的東西。 我在這里遇到的問題是array_key_exists
根本無法正常工作。
我已經將代碼打印到頁面上了; 絕對是數組類型,不是必需的。 陣列鍵存在; 我已經在字符串和整數之間進行了轉換,但找不到。
現在,最令人困惑的是我在
$presets = $this->presets->$name;
echo gettype($version).'<br>';
foreach ( $presets as $key=>$test ) {
if ( $key===$version ) echo 'string found1<br>';
elseif ( $key==$version ) echo 'string found2<br>';
}
if ( !array_key_exists($version,$presets) )
echo 'array_key_exists string fail.<br>';
$version = intval($version);
echo gettype($version).'<br>';
foreach ( $presets as $key=>$test ) {
if ( $key===$version ) echo 'int found1<br>';
elseif ( $key==$version ) echo 'int found2<br>';
}
if ( !array_key_exists($version,$presets) )
echo 'array_key_exists int fail.<br>';
輸出:
string
string found1
array_key_exists string fail.
integer
int found2
array_key_exists int fail.
輸出是絕對奇怪的,因為在int
和string
搜索中,鍵都匹配。 實際上,在string
搜索中,它輸出“ string found1”,這意味着它===數組中的鍵。 那么,為什么array_key_exists
總是產生FALSE
?
變量$presets
是一些數組,其索引是使用preg_match regex代碼創建的,以解析索引。 盡管可以通過手動比較證明發現了===值,但這是我唯一可以增加的謎團,因此這都不重要。 array_key_exists
應該返回TRUE
Array
(
[100] => stdClass Object
()
)
根據您從$key==$version
和$key===$version
,我們知道鍵是一個數字字符串。 看來您使用的是PHP <7.2版本。
在這些版本中,您無法引用數字字符串數組鍵,並且無論您以數字形式還是字符串形式提供鍵, array_key_exists
都將返回false
。 PHP 7.2改進了這種令人困惑的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.