簡體   English   中英

array_key_exists錯誤令人困惑

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

輸出是絕對奇怪的,因為在intstring搜索中,鍵都匹配。 實際上,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM