values valor obtener keys indice extraer elemento buscar array php array-key

valor - php array key value



¿Está bien usar array[key] en PHP? (6)

¿Está bien usar array sin quotion simple o doble como $ array [key]? Pensé que era malo porque PHP busca constante primero si no uso una comilla simple o doble. Uno de mis colegas me dijo que no importa.

¿Qué piensan ustedes?


A menos que la clave sea realmente una constante, no hay ninguna razón para que no ponga comillas alrededor de la clave.

La forma en que PHP funciona es que busca el valor constante de lo que has puesto, pero toma la representación de cadena si no se puede encontrar la constante.

Si alguien editara su código más adelante y agregara una constante con ese nombre de clave, solo causaría más dolores de cabeza.


Del manual de PHP - ¿Por qué $ foo [bar] está equivocado?

Siempre use comillas alrededor de un índice de matriz literal de cadena. Por ejemplo, $ foo [''bar''] es correcto, mientras que $ foo [bar] no lo es. ¿Pero por qué? Es común encontrar este tipo de sintaxis en los viejos scripts:

<?php $foo[bar] = ''enemy''; echo $foo[bar]; // etc ?>

Esto está mal, pero funciona. La razón es que este código tiene una constante (barra) indefinida en lugar de una cadena (''barra'' - observe las comillas). PHP puede en el futuro definir constantes que, desafortunadamente para dicho código, tienen el mismo nombre. Funciona porque PHP convierte automáticamente una cadena vacía (una cadena sin comillas que no corresponde a ningún símbolo conocido) en una cadena que contiene la cadena vacía. Por ejemplo, si no hay definida una constante llamada barra, entonces PHP sustituirá en la cadena ''barra'' y usará eso.

Hay más ejemplos en el manual para que pueda consultar.


Es una mala práctica no citar valores clave, por varias razones:

  1. Posibles colisiones con nombres de símbolos significativos, como define ''d constantes.
  2. Algunas teclas no se pueden expresar sin citar (por ejemplo, la tecla "]" ).
  3. Los malos hábitos pueden morderte más adelante (a saber, en lo que respecta a # 1 y # 2).
  4. Rendimiento: la búsqueda de define lleva tiempo.

Si quiere evitar escribir citas sobre nombres que son solo elementos estándar de una cosa que está pasando mucho, tal vez le conviene usar objetos en su lugar, que toman una sintaxis object->property lugar de $array["element"] sintaxis.


Esto no está bien y para agregar a lo que otros han dicho, provocará un error en la mayoría de los casos:

8 Notice Use of undefined constant key - assumed ''key'' in file: ''index.php'' on line 46

Consulte la sección en el Manual de PHP para "¿Por qué $ foo [bar] está equivocado?" en "Lo que se puede y lo que no se debe hacer" en esta página: http://php.net/manual/en/language.types.array.php


Esto es incorrecto y definirá automáticamente una constante:

$var = $array[bar];

Sin embargo, este uso es correcto:

$var = "string $array[bar] ...";

Para compatibilidad con PHP2, esta vieja sintaxis aún está permitida en contexto de cadena. Citar la clave llevaría a un error de análisis, a menos que también use {llaves} alrededor de ella.


No se considera correcto , incluso si funciona en la mayoría de los casos.


Básicamente, cuando PHP ve esto:

echo $array[key];

Buscará una constante, definida con define , llamada key , y, si no hay ninguna, tomará el valor de ''key'' .


Pero, si hay algo así antes en su código:

define(''key'', ''glop'');

No tomará

echo $array[''key''];

nunca más ; en su lugar, usará el valor de la constante de key , y su código será el mismo que:

echo $array[''glop''];


Al final, no poner citas alrededor del nombre de la llave es malo por al menos dos razones:

  • Existe el riesgo de que no haga lo que esperas , lo cual es muy malo
    • Podría, hoy ...
    • ¿Pero qué pasa con la próxima semana / mes / año?
    • Tal vez, un día, define una constante con el nombre incorrecto ;-)
  • No es bueno para el rendimiento:
    • tiene que buscar una constante, antes de usar ''key''
    • Y, como se dice en un comentario, genera avisos (incluso si deshabilita error_reporting y display_errors , los avisos / advertencias / errores aún se generan, incluso si se descartan más adelante)

Entonces: no debes escuchar a ese tipo en este punto: está equivocado: importa .


Y si necesita alguna "prueba" que sea "mejor" de lo que la gente puede decirle en , puede indicarle esta sección del manual, como referencia: ¿Por qué está $ foo [bar] mal?