2012-02-29 20 views
7

Si hay algún tipo de limitaciones para las teclas de matriz en PHP? Longitud ? ¿Cuerdas no aceptables?¿Limitaciones de claves (índices) de la matriz asociativa PHP?

En el official documentation encontró solo esto, pero no hay información sobre las limitaciones de las claves.

Una clave puede ser un número entero o una cadena. Si una clave es la representación estándar de un entero, se interpretará como tal (es decir, "8" se interpretará como 8, mientras que "08" se interpretará como "08"). Los flotantes en la clave se truncan en enteros. Los tipos de matriz indexadas y asociativos son del mismo tipo en PHP, que tanto puede contener índices enteros y de cadenas. *

Respuesta

4

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

Esta pregunta es casi exactamente el mismo. Pero si no quieres confiar en nada extraoficial, solo usa menos teclas pequeñas. Incluso puede obtener algunos beneficios de rendimiento de ella.

EDIT: Y como el The PHP Manual dice:

Nota: No es ningún problema para una cadena se haga muy grande. PHP no impone ningún límite en el tamaño de una cadena; el único límite es la memoria disponible de la computadora en la que se está ejecutando PHP.

+0

suena muy bien. Necesito claves largas para un tratamiento de datos específico, por lo que no hay dudas sobre el rendimiento, solo la funcionalidad. También es necesario verificar si no hay personajes "prohibidos", es la segunda parte de la pregunta. –

+1

Las cadenas no tienen caracteres prohibidos. Sin embargo, tenga en cuenta la barra invertida en cadenas/ya que escapará a la siguiente letra. – MichaelH

+1

Menos uno para citar la nota "no hay problema para cadenas largas" en documentos PHP. Eso no significa necesariamente que las claves largas en una matriz no sean un problema, por rendimiento o por otras razones. Eso puede ser cierto, pero esa nota citada no dice eso. – matteo

9

Cualquier cadena utilizada como clave en una matriz es hash. De forma análoga a md5() y sha1(), esta reducción reduce (potencialmente gigabytes de) caracteres a una longitud conocida. a diferencia de md5() o sha1(), el mecanismo de hash interno de la matriz convertirá la cadena en un entero que luego puede usar para direccionar una categoría dentro de la matriz. Las matrices de PHP no son matrices verdaderas/reales: son una especie de HashMap vinculado internamente. Teniendo en cuenta que varias cadenas pueden reducirse al mismo hash, cada categoría es una lista. Si hay múltiples elementos dentro del mismo contenedor, cada clave debe ser evaluada. Ni que decir tiene que las claves cortas se comparan más rápido que 1 MB de texto.

TL; DR: aunque no está limitado por PHP, debe limitarse. Si tiene cadenas bastante largas, considere ejecutarlas a través de md5() o sha1() (o cualquier otra función de hashing, en realidad) para reducir la longitud de la clave.

+0

No sabía, lo que la clave es hashed internamente, gracias por la explicación. De hecho, parece buena idea hacer un md5 adicional para reducir la longitud de la clave. –

+2

¿No estás contradicho? Si las cadenas son hash internamente, ¿por qué debería hash cadena "bastante larga" en absoluto? Sin mencionar que perderías la garantía teórica de unicidad (¿entonces qué haces? ¿Reinventa toda la estructura de datos, con listas, etc.?) Tu parte TL; DR parece contradecir el primer párrafo y no veo ningún razonamiento Detrás de eso. – matteo

-2

¿Estás seguro de que te refieres a la llave? o quieres decir valor?

con matrices asociativas: $ array = new Array ( nueva matriz ( "clave" => "valor" ) );

.. En cuanto a la clave creo que en teoria no hay limitaciones a la longitud embargo .. eligiendo claves largas no es una buena idea si usted querrá ellos reusre mucho ..

como para la valores que se deben tomar sólo un botín en matrices en general y qué tipos de datos se les permite y esas cosas ..

esperanza esto ayuda ..

Cuestiones relacionadas