繁体   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