使用字符串作为索引的字符串变量上的php isset()

使用字符串作为索引的字符串变量上的php isset(),php,arrays,isset,Php,Arrays,Isset,我对PHP中的isset()函数有一些奇怪的问题。 让我看看 <?php $aTestArray = array( 'index' => array( 'index' => 'Główna' ), 'dodaj' => 'Dodaj ogłoszenie', ); var_dump( isset($aTestArray['index']) ); var_dump( isset($aTestArray['index']['inde

我对PHP中的isset()函数有一些奇怪的问题。 让我看看

<?php

$aTestArray = array(
    'index' => array(
        'index' => 'Główna'
    ),
    'dodaj' => 'Dodaj ogłoszenie',
);

var_dump( isset($aTestArray['index']) );
var_dump( isset($aTestArray['index']['index']) );
var_dump( isset($aTestArray['dodaj']) );

var_dump( isset($aTestArray['index']['none']) );
var_dump( isset($aTestArray['index']['none']['none2']) );

// This unexpectedly returns TRUE
var_dump( isset($aTestArray['dodaj']['none']) );
var_dump( isset($aTestArray['dodaj']['none']['none2']) );


?>

为什么第六个var_dump()返回TRUE?

在字符串上使用
[]
运算符时,它需要一个整数值。如果它没有得到一个,它将转换它
['none']
被转换为
[0]
,在您的例子中,这是一个
D
,这是因为PHP是用C编写的。既然$ATEStaray['dodaj']是字符串:

$aTestArray['dodaj']['none']

$aTestArray['dodaj'][0]
因为

var_dump( (int) 'none')

0不正确。PHP最好的特性之一是它允许字符串键
['none']
是一个有效的键名。+1还很好地解释了在字符串上使用
[]
会试图将其字符作为数组组件访问。@JamWaffles绝对是!但这是在使用关联数组时发生的。在本例中,我们正在执行类似于
'Dodaj ogłoszenie'['none']
的操作,它不支持命名键。@TomvanderWoerdt我现在明白了。我应该更仔细地阅读这个问题——对不起!顺便说一下,这在PHP5.4中可能会发生变化。当与5.4中与字符串偏移量读取相关的更改一起查看时,发现该“功能”存在问题。目前正在讨论在这种情况下添加一个通知。如果将此答案更改为对Tom答案的解释性评论,将更加有用。
var_dump( (int) 'none')