2013-08-15 7 views
36

Curiosità PHP qui.Matrici con i tasti NULL

Se si dichiara un array come questo:

<?php $arr = [ 'foo' => 'bar', NULL => 'hello' ]; ?> 

si può accedere in questo modo

print $arr[NULL]; 

Questo stamperà hello. Perché questo è utile, rilevante o necessario? È un bug o una funzionalità PHP?

mia unica idea era che si poteva dichiarare array con la chiave NULL essendo pari ad un messaggio di errore per spiegare a chi utilizza una chiave NULL che la loro chiave è nullo:

$arr[NULL] = 'Warning you have used a null key, did you mean to?'; 

Qualcuno ha trovato questo utile ? Sembra essere qualcosa che causa più danni che benefici.

+13

"più male che bene" si può dire su molte cose in PHP ... – DCoder

+2

@DCoder a volte che sembra essere php motto –

+5

+1 Sono felice che funzioni, io pensare di avere una chiave nulla può essere molto utile. – Wilt

risposta

48

preventivo da the manual:

Null sarà gettato alla stringa vuota, cioè il nullo chiave sarà effettivamente essere conservato sotto "".

Ulteriori dettagli su come le chiavi sono espressi sono i seguenti:

La chiave può essere sia un numero intero o una stringa. Il valore può essere di qualsiasi tipo .

Inoltre si verificherà il seguente calchi chiave:

  • stringhe contenenti interi decimali validi, a meno che il numero è preceduto da un segno +, saranno gettati al tipo intero. Per esempio. la chiave "8" verrà effettivamente memorizzata sotto 8. D'altra parte "08" non sarà essere cast, in quanto non è un numero intero decimale valido.
  • Anche i float vengono convertiti in numeri interi, il che significa che la parte frazionaria verrà troncata. Per esempio. il tasto 8.7 sarà effettivamente memorizzati sotto 8.
  • Bools sono espressi in numeri interi, anche, ad esempio il tasto vero sarà effettivamente immagazzinato sotto 1 e la chiave falsa sotto 0.
  • Null sarà gettato alla stringa vuota , ovvero la chiave null verrà effettivamente memorizzata in "".
  • Le matrici e gli oggetti non possono essere utilizzati come chiavi. In caso contrario, verrà visualizzato un avviso: Tipo di offset non valido.

Per quanto utile o necessario, questo è discutibile. Ti viene chiesto di utilizzare numeri interi o chiavi di stringa e sei stato avvisato della trasmissione di chiavi implicite.

+3

_il tasto nullo verrà effettivamente memorizzato in "" "' _ sovrascrivendo il valore precedente se ce n'è uno. È possibile accedere a tale elemento con '$ arr [" "]'; '$ arr [NULL]' restituirà l'elemento memorizzato in '" "'. –

8

Ho trovato la possibilità di avere chiavi Null utili, quando si accede a db, usando una classe, che può usare uno dei valori di colonna come chiave dell'array restituito. Alcuni valori di colonna potrebbero essere nulli.

+1

Ho trovato utile anche per lo stesso motivo. – Will

+4

Se un altro valore di colonna è una stringa vuota '" "', sei nei guai. –

2

Data un'API di modulo popolata da un array php associativo, ho trovato utile utilizzare un valore con chiave nulla per indicare il valore NULL in un database. Per esempio.:

$this->addElement('select', 'foreignkey_id', array(
    'label'=>'Add a Poll', 
    'multiOptions' => array(
     null => 'No value selected', 
     '0' => 'Element with ID0 selected' 
) 
)); 

In questo caso, mappe nulli ad un valore NULL (default) nella colonna foreignkey_id database e 0 per una riga con chiave 0.

fuori di questo particolare usecase tuttavia, tendono a pensare Il commento di DCoder è autorevole qui ...