2011-11-11 20 views
25

yo sólo había encontrado un poco muy raro de código PHP:PHP llaves en la notación de matriz

$oink{'pig'} = 1; 
var_dump($oink); 

$oink{'pig'} = '123123'; 
echo $oink{'pig'}; /* => 123123 */ 
echo $oink['pig']; /* => 123123 */ 

Funciona como una matriz, pero en ninguna parte se menciona en el manual. ¿Que es esto?

+0

Véase también http://stackoverflow.com/q/335205/632951 – Pacerier

+0

@Jauzsika, si alguna vez se vuelve, por favor, acepte [respuesta de Pacerier] (https://stackoverflow.com/a/26809707/283366) ya que es de mucha mejor calidad. – Phil

Respuesta

1

Se menciona en el manual, pero es oscura:

http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

En pocas palabras, las llaves acceder sólo a un único carácter (trate de añadir una cadena completa y verá que devuelve sólo el primer personaje). También está en desuso, por lo que evitaría su uso.

+3

No es cierto. Ver mi ejemplo. – Jauzsika

+1

Acceder a una cadena como una matriz produce un carácter. Allí, también, puede usar llaves y corchetes de manera intercambiable. –

4

De acuerdo con este comentario sobre la documentación, es sólo otra notación, probablemente diseñado para parecerse a la sintaxis de Perl: http://www.php.net/manual/de/language.types.array.php#99015

Actualización: Cuando esta respuesta fue publicada originalmente, el manual de PHP no tenían ningún funcionario información sobre esta notación. Para 2014, sin embargo, el comentario al que se hace referencia arriba había sido eliminado y, como Pacerier's answer says, la notación ha sido mencionada oficialmente en el manual.

26

Es es mencionado en el manual. {} es sólo una sintaxis alternativa a []§:

Ambos corchetes y llaves pueden usarse indistintamente para acceder a elementos de la matriz (por ejemplo $array[42] y $array{42} será tanto hacer lo mismo en el ejemplo anterior).

Lo mismo ocurre con las cuerdas §:

Caracteres dentro de cadenas se puede acceder y modificar mediante la especificación de la base cero desplazamiento del carácter deseado después de la cadena usando soportes de matriz cuadrada, como en $str[42]. Piense en una cadena como una matriz de caracteres para este propósito. [...]

Nota: Las cadenas también se puede acceder usando llaves, como en $str{42}, para el mismo propósito.

+8

A bazillions un año tarde, pero solo para notar que puede hacer $ array [] para enviar, pero no puede hacer $ array {} – Vertig0

+3

@ Vertig0, Yepp, la capacidad de intercambio es "para acceder a los elementos de la matriz". – Pacerier

Cuestiones relacionadas