2012-02-29 18 views
7

Se esistono dei limiti per le chiavi di array in PHP? Lunghezza? Stringhe non accettabili?Limitazioni delle chiavi di PHP associative (indici)?

Nel official documentation trovato solo questo, ma non ci sono informazioni sui limiti delle chiavi.

Una chiave può essere un numero intero o una stringa. Se una chiave è la rappresentazione standard di un intero, verrà interpretata come tale (ad esempio "8" verrà interpretato come 8, mentre "08" sarà interpretato come "08"). I float in chiave sono troncati a numero intero. I tipi di array indicizzati e associativi sono dello stesso tipo in PHP, che può contenere sia indici interi e stringhe. *

risposta

4

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

Questa domanda è quasi la stessa esatta. Ma se non vuoi fidarti di qualcosa di non ufficiale, ti basta usare meno chiavi piccole. Potresti anche ottenere alcuni benefici in termini di prestazioni.

EDIT: E come il The PHP Manual dice:

Nota: Non è un problema per una stringa di diventare molto grande. PHP non impone limiti alle dimensioni di una stringa; l'unico limite è la memoria disponibile del computer su cui è in esecuzione PHP.

+0

suona alla grande. Ho bisogno di chiavi lunghe per alcuni trattamenti specifici, quindi non c'è alcuna questione di prestazioni, solo funzionalità. È necessario verificare se non ci sono anche caratteri "vietati", è la seconda parte della domanda. –

+1

Le stringhe non hanno caratteri proibiti. Tuttavia sii consapevole del backslash nelle stringhe/in quanto sfuggirà alla lettera successiva. – MichaelH

+1

Meno uno per citare la nota "nessun problema per le stringhe lunghe" nei documenti PHP. Ciò non significa necessariamente che le chiavi lunghe in un array non siano un problema, per le prestazioni o per altri motivi. Potrebbe essere vero, ma quella nota citata non lo dice. – matteo

9

Qualsiasi stringa utilizzata come chiave in una matrice viene sottoposta a hash. Analogamente a md5() e sha1() questo hashing riduce (potenzialmente gigabyte di) caratteri ad una lunghezza nota. a differenza di md5() o sha1() il meccanismo di hashing interno dell'array convertirà la stringa in un numero intero che può quindi utilizzare per indirizzare un bucket all'interno dell'array. Gli array di PHP non sono veri/veri array: sono internamente una sorta di HashMap Linked. Considerando che più stringhe possono abbellire lo stesso hash, ogni bucket è una lista stessa. Se ci sono più elementi all'interno dello stesso bucket, ogni chiave deve essere valutata. Inutile dire che i tasti corti vengono confrontati più velocemente di 1 MB di testo.

TL; DR: sebbene non sia limitato da PHP, è necessario limitarsi. Se hai stringhe abbastanza lunghe, considera di eseguirle tramite md5() o sha1() (o qualsiasi altra funzione di hashing, in realtà) per ridurre la lunghezza della chiave.

+0

Non sapevo, quale chiave è hashed internamente, grazie per la spiegazione. In effetti, sembra una buona idea creare un md5 aggiuntivo per ridurre la lunghezza della chiave. –

+2

Non ti contraddicono? Se le stringhe sono sottoposte a hashing internamente, perché dovresti eseguire una stringa "abbastanza lunga"? Per non parlare del fatto che perderebbe la garanzia teorica di unicità (quindi cosa fai? Reinventi l'intera struttura dei dati, con liste ecc.?) La tua parte TL; DR sembra contraddire il primo paragrafo e non vedo alcun ragionamento Dietro. – matteo

-2

sei sicuro di fare riferimento alla chiave? o intendi valore?

con gli array associativi: $ Array = new Array ( nuovo array ( "chiave" => "valore" ) );

.. Per quanto riguarda la chiave penso che in Theorie non ci sono limitazioni di lunghezza comunque .. scegliendo chiavi lunghe non è una buona idea se si vorrà reusre loro un sacco ..

come per il I valori si dovrebbe solo prendere un bottino a matrici in generale e quali tipi di dati sono autorizzati e roba ..

speranza che questo aiuti ..

Problemi correlati