2013-08-15 11 views
36

Mądrości PHP tutaj.Tablice z kluczami NULL

Jeśli zadeklarować tablicę tak:

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

Możemy do niego dostęp jak ten

print $arr[NULL]; 

To będzie drukować hello. Dlaczego jest to przydatne, istotne lub konieczne? Czy jest to błąd PHP lub funkcja?

Mój jedyny pomysł, że można zadeklarować tablicę z kluczem NULL jest równa komunikatu o błędzie, aby wyjaśnić, kto używa klucza NULL, że ich kluczowym jest zerowy:

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

Czy ktoś znalazł ten użyteczny ? Wydaje się być czymś, co powoduje więcej szkód niż pożytku.

+13

"więcej szkód niż dobra" można powiedzieć o wielu rzeczach w PHP ... – DCoder

+2

@DCoder czasami pojawia się jako php motto –

+5

+1 Jestem szczęśliwy, że to działa, ja Myślę, że posiadanie klucza zerowego może być bardzo użyteczne. – Wilt

Odpowiedz

48

Cytat the manual:

Null zostanie oddane do pustego łańcucha, czyli klucz zerowy faktycznie być przechowywane w pozycji „”.

Dodatkowe informacje o tym, jak klucze są odlewane są następujące:

Kluczem może być albo liczbą całkowitą lub łańcuchem. Wartość może być dowolnego typu .

Dodatkowo wystąpią następujące kluczowe odlewy:

  • Struny zawierające poprawnych liczb całkowitych dziesiętnych, chyba że numer jest poprzedzony znakiem +, zostanie oddanych do typu całkowitego. Na przykład. klucz "8" będzie w rzeczywistości przechowywany pod 8. Z drugiej strony "08" nie będzie odlane , ponieważ nie jest prawidłową liczbą całkowitą dziesiętną.
  • Pływaki są również rzutowane na liczby całkowite, co oznacza, że ​​część ułamkowa zostanie obcięta. Na przykład. klucz 8,7 faktycznie będą przechowywane w 8.
  • Bools zostały oddane do liczb całkowitych, zbyt, czyli klucz prawda rzeczywiście będą przechowywane w pkt 1 i klucz fałszywe pod 0.
  • Null zostanie oddane do pustego łańcucha , tzn. kluczowy null będzie przechowywany w "".
  • Tablic i obiektów nie można używać jako klawiszy. Takie działanie spowoduje ostrzeżenie: Nielegalny typ przesunięcia.

W związku z tym, że jest to przydatne lub konieczne, jest to dyskusyjne. Zostaniesz poproszony o użycie liczb całkowitych lub ciągów znaków i otrzymałeś ostrzeżenie o niejawnym przekazywaniu kluczy.

+3

_the kluczowy null będzie przechowywany pod '' "' _ _ nadpisując poprzednią wartość, jeśli istnieje. Dostęp do takiej pozycji można uzyskać za pomocą '$ arr [" "]'; '$ arr [NULL]' zwróci pozycję przechowywaną w '' "'. –

8

Znalazłem możliwość użycia klawiszy Null przy uzyskiwaniu dostępu do db, używając klasy, która może użyć jednej z wartości kolumny jako klucza do zwróconej tablicy. Niektóre wartości kolumn mogą mieć wartość zerową.

+1

Znalazłem również przydatny z tego samego powodu. – Will

+4

Jeśli inna wartość kolumny jest pustym ciągiem '" "', masz kłopoty. –

2

W formularzu API zapełnionym przez asocjacyjną tablicę php, okazało się, że przydatne jest użycie wartości klucza o wartości NULL w celu wskazania wartości NULL w bazie danych. Na przykład.:

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

W tym przypadku, null mapy do wartości NULL (default) w kolumnie foreignkey_id bazy danych, i od 0 do rzędu z kluczem 0.

Poza tym konkretnym usecase Jednak staram się myśleć Komentarz DCoder jest autorytatywny tutaj ...

Powiązane problemy