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