Mam kilka kluczy tablic php, które są wypełnione wieloma dziwnymi znakami.
Czy to jest dozwolone? Czy są jakieś ograniczenia co do tego, czego nie mogę użyć?
Mam kilka kluczy tablic php, które są wypełnione wieloma dziwnymi znakami.
Czy to jest dozwolone? Czy są jakieś ograniczenia co do tego, czego nie mogę użyć?
Odpowiedzi:
Zgodnie z instrukcją :
Klucz może być liczbą całkowitą lub łańcuchem. Wartość może być dowolnego typu.
Dodatkowo wystąpią następujące rzucane klucze:
- Ciągi zawierające prawidłowe liczby całkowite będą rzutowane na typ całkowity. Np. Klucz „8” będzie faktycznie przechowywany pod 8. Z drugiej strony „08” nie będzie rzutowane, ponieważ nie jest prawidłową liczbą dziesiętną.
- Liczba zmiennoprzecinkowa jest również rzutowana na liczby całkowite, co oznacza, że część ułamkowa zostanie obcięta. Np. Klucz 8.7 będzie faktycznie przechowywany pod 8.
- Wartości logiczne są również rzutowane na liczby całkowite, tj. Klucz prawda będzie faktycznie przechowywany pod 1, a klucz fałsz pod 0.
- Null zostanie rzutowany na pusty łańcuch, tj. Klucz null będzie faktycznie przechowywany pod "".
- Tablice i obiekty nie mogą być używane jako klucze. Spowoduje to wyświetlenie ostrzeżenia: Niedozwolony typ przesunięcia.
Podręcznik ponownie :
Łańcuch to seria znaków, gdzie znak jest tym samym, co bajt. Oznacza to, że PHP obsługuje tylko zestaw 256 znaków, a zatem nie oferuje natywnej obsługi Unicode. Zobacz szczegóły typu string.
Krótko mówiąc, kluczem może być dowolny ciąg. Ciąg może zawierać dowolne dane binarne (do 2 GB). Dlatego klucz może być dowolnymi danymi binarnymi (ponieważ ciąg może być dowolnymi danymi binarnymi).
Niektóre przypadkowe (prawidłowe) nadużycia kluczy tablicowych:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Klucz musi być łańcuchem lub liczbą całkowitą. Odbywa się kilka rzutów, ale myślę, że podręcznik dobrze wyjaśnia:
Klucz może być liczbą całkowitą lub łańcuchem. Wartość może być dowolnego typu.
Dodatkowo wystąpią następujące rzucane klucze:
- Ciągi zawierające prawidłowe liczby całkowite będą rzutowane na typ całkowity. Np. Klucz „8” będzie faktycznie przechowywany pod 8. Z drugiej strony „08” nie będzie rzutowane, ponieważ nie jest prawidłową liczbą dziesiętną.
- Liczba zmiennoprzecinkowa jest również rzutowana na liczby całkowite, co oznacza, że część ułamkowa zostanie obcięta. Np. Klucz 8.7 będzie faktycznie przechowywany pod 8.
- Wartości logiczne są również rzutowane na liczby całkowite, tj. Klucz prawda będzie faktycznie przechowywany pod 1, a klucz fałsz pod 0.
- Null zostanie rzutowany na pusty łańcuch, tj. Klucz null będzie faktycznie przechowywany pod "".
- Tablice i obiekty nie mogą być używane jako klucze. Spowoduje to wyświetlenie ostrzeżenia: Niedozwolony typ przesunięcia.
Znalazłem tę odpowiedź, szukając więcej informacji na temat problemu, który miałem. Używałem ciągów znaków ze znakami UTF-8, które nie działałyby jako klucze do tablicy, którą miałem.
Coś jak
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Dla mnie (niezbyt dużym ani sprytnym) rozwiązaniem było zrobienie tego ...
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
Klucze tablic PHP mogą być liczbami całkowitymi lub łańcuchami. Łańcuchy PHP to tablice bajtów, czyli sekwencje bajtów. Nie ma innych typów łańcuchów, a PHP w inny sposób nie nakłada żadnych specjalnych ograniczeń na ciągi kluczy tablicowych. Innymi słowy: tak długo, jak jest to ciąg, wszystko jest dozwolone.
Jeśli złożone klucze powodują błąd „nieokreślonego indeksu”, możesz po prostu mieć problem z „przycinaniem”.
Szalałem, ponieważ złożony klucz wypluł błąd „undefined index” i pomyślałem, że może to naruszenie składni. Klucz tablicy powodujący błąd został zbudowany na podstawie pola z zapytania bazy danych MySQL, które konwertowałem na klucz i używałem w nowej tablicy. Klucz wyglądał następująco: pl_1DNKoiJKwotCqAycickBVhTy
a oto jak został skonstruowany kod.
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
kiedy w rzeczywistości, $keyval
i $dbquery['fieldname']
wydawało się być idealnym dopasowaniem (weryfikowane wizualnie przez echo obu w przeglądarce). Tajemnica została rozwiązana poprzez proste użycie trim
w drugim stwierdzeniu w następujący sposób: $keyval = trim($array_two['fieldname']);
Po „przycięciu” php nie narzekał.
Mając nadzieję, że to uratuje innych przed frustrującymi momentami ...
Osobiście nie miałem żadnych problemów z nietypowymi znakami w kluczach tablicowych. To, co jest, a co nie jest legalne, nie jest dobrze udokumentowane, poza stwierdzeniem, że klucz musi być skalarem. Najlepiej po prostu spróbować i zobaczyć.
W tablicy php nie można używać klucza: 2.3 ani liczb dziesiętnych
Zakoduj stronę php w ANSI "é", którego będzie można używać (Cinéma nie pojawi się jako Cinéma). W Notepad ++ po prostu użyj menu Encode => Convert ANSI i zapisz
é
nie ma, a jeśli OP nie używa w końcu Notepad ++?
$a = (object) ['@km³' => 123]; error_log($a->@km³);