php isset () для строковой переменной, использующей строку в качестве индекса - PullRequest
5 голосов
/ 04 декабря 2011

У меня странная проблема с функцией isset () в PHP. Позвольте мне показать ....

<?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:

bool(true)
bool(true)
bool(true)

bool(false)
bool(false)
bool(true)
bool(false)

Почему шестой var_dump () возвращает TRUE?

Ответы [ 2 ]

12 голосов
/ 04 декабря 2011

При использовании операторов [] в строке ожидается целочисленное значение.Если он не получит его, он преобразует его.['none'] преобразуется в [0], что в вашем случае является D.

1 голос
/ 04 декабря 2011

Это потому, что PHP написан на C. Так что $ aTestArray ['dodaj'] это строка:

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

совпадает с

$aTestArray['dodaj'][0]

потому что

var_dump( (int) 'none')

равно 0

...