2011-12-03 16 views
5

Ho qualche strano problema con la funzione isset() in PHP. Lasciami mostrare ....php isset() su una variabile stringa usando una stringa come indice

<?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'])); 


?> 

del var_dump tornerà:

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

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

Perché il sesto var_dump() Restituisce vero?

risposta

12

Quando si utilizzano gli operatori [] su una stringa, si attenderà un valore intero. Se non ne ottiene uno, lo convertirà. ['none'] viene convertito in [0] che, nel tuo caso, è un D.

+0

errato. Una delle migliori caratteristiche di PHP è che consente __di consentire chiavi stringa; '['none']' è un nome chiave valido. – Bojangles

+1

+1 Buono anche per spiegare che l'uso di '[]' su una stringa tenta di accedere ai suoi caratteri come componenti dell'array. –

+1

@JamWaffles Assolutamente! Ma questo è quando si lavora con array associativi. In questo caso, stiamo facendo qualcosa come "Dodaj ogłoszenie" ["none"] ', che non supporta le chiavi con nome. –

1

Si perché PHP è scritto in C. Quindi, dal momento $ aTestArray [ 'Dodaj'] è la stringa:

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

è lo stesso di

$aTestArray['dodaj'][0] 

perché

var_dump((int) 'none') 

è 0

+0

Questa risposta sarebbe molto più utile se fosse stata modificata in un commento esplicativo alla risposta di Tom. –