2012-02-29 10 views
7

Jeśli są jakieś ograniczenia dla kluczy tablicy w PHP? Długość? Nieakceptowane ciągi?Ograniczenia kluczy (indeksów) tablic asocjacyjnych PHP?

W pliku official documentation znaleziono tylko to, ale nie ma informacji o ograniczeniach klawiszy.

Klucz może być liczbą całkowitą lub łańcuchem. Jeśli klucz jest standardową reprezentacją liczby całkowitej, będzie interpretowany jako taki (tj. "8" będzie interpretowane jako 8, a "08" będzie interpretowane jako "08"). Klawisz float jest obcięty do liczby całkowitej. Indeksowane i typy asocjacyjnych tablicy są tego samego typu w PHP, który może zawierać zarówno indeksy całkowitych i ciągów. *

Odpowiedz

4

What is the max key size for an array in PHP?

To pytanie jest niemal dokładnie taki sam. Ale jeśli nie chcesz ufać niczym nieoficjalnemu, po prostu trzymaj się mniej małych klawiszy. Możesz nawet uzyskać korzyści z wydajności.

EDIT: I jak The PHP Manual mówi:

Uwaga: To żaden problem dla ciąg staje się bardzo duża. PHP nie nakłada żadnej granicy na rozmiar ciągu; jedynym ograniczeniem jest dostępna pamięć komputera, na którym działa PHP.

+0

Brzmi świetnie. Potrzebuję długich kluczy do określonego przetwarzania danych, więc nie ma kwestii wydajności, tylko funkcjonalności. Musisz sprawdzić, czy nie ma też "zakazanych" znaków, to druga część pytania. –

+1

Ciągi nie mają zabronionych znaków. Należy jednak pamiętać o ukośnikach odwrotnych w łańcuchach /, ponieważ będą one uciec od następnej litery. – MichaelH

+1

Minus jeden do cytowania notki "nie ma problemu dla długich ciągów" w dokumentach PHP. To niekoniecznie oznacza, że ​​długie klucze w tablicy nie stanowią problemu, z powodu wydajności lub z innych powodów. To może być prawda, ale ta notatka nie mówi tego. – matteo

9

Dowolny ciąg znaków używany jako klucz w tablicy jest mieszany. Analogicznie do md5() i sha1() ten skrót redukuje (potencjalnie gigabajtów) znaków do znanej długości. w przeciwieństwie do md5() lub sha1() wewnętrzny mechanizm haszujący tablicy przekształci twój ciąg znaków w liczbę całkowitą, którą następnie może wykorzystać do adresowania kubełka w tablicy. Macierze PHP nie są prawdziwymi/prawdziwymi tablicami - są wewnętrznie połączonymi HashMapami. Biorąc pod uwagę, że wiele łańcuchów może się zepsuć do tego samego skrótu, każdy z nich jest samą listą. Jeśli w tym samym wiadrze znajduje się wiele elementów, każdy z nich musi zostać oceniony. Nie trzeba dodawać, że krótkie klawisze są porównywane szybciej niż 1 MB tekstu.

TL; DR: mimo że nie jesteś ograniczony przez PHP, powinieneś ograniczyć się. Jeśli masz dość długie łańcuchy, rozważ użycie ich poprzez md5() lub sha1() (lub dowolną inną funkcję mieszającą), aby zmniejszyć długość klucza.

+0

Nie wiedziałem, jaki klucz jest mieszany wewnętrznie, dzięki za wyjaśnienie. Rzeczywiście, dobrym pomysłem jest wykonanie dodatkowego md5 w celu zmniejszenia długości klucza. –

+2

Czy nie sprzeciwiasz się samemu sobie? Jeśli łańcuchy są mieszane wewnętrznie, dlaczego w ogóle powinieneś mieszać łańcuch "dość długi"? Nie wspominając już o tym, straciłbyś teoretyczną gwarancję jednolitości (stąd co robisz ?, czy zmienisz całą strukturę danych, listy itp.?) Twoja część TL, DR wydaje się przeczyć pierwszemu akapitowi i nie widzę żadnego uzasadnienia Za tym. – matteo

-2

czy jesteś pewien, że odnosisz się do klucza? czy masz na myśli wartość?

z asocjacyjnych: $ array = new tablicy ( nowej tablicy ( "klucz" => "wartość" ) );

.. jak dla klucza myślę, że w Theorie nie ma ograniczenia długości jednak .. chosing długich kluczy nie jest dobrym pomysłem, jeśli będziemy chcieli reusre im dużo ..

jak dla wartości należy po prostu wziąć łupy na tablicach w ogóle i jakie typy danych są dozwolone i rzeczy ..

nadzieję, że to pomaga ..

Powiązane problemy