Todos los artículos

Interpolar un arreglo PHP dentro de una cadena

Entendiendo cómo interpolar arreglos PHP dentro de cadenas.

Definición de interpolación de variables del manual de PHP:

Cuando se especifica una cadena entre comillas dobles o con heredoc, las variables dentro de ella se interpretan.

Hay dos tipos de sintaxis: una simple y otra compleja. La sintaxis simple es la más común y práctica. Permite insertar una variable, un valor de un arreglo o una propiedad de un objeto en una cadena con un mínimo esfuerzo.

La sintaxis compleja se reconoce por las llaves que rodean la expresión.

Para insertar una variable podemos utilizar cualquiera de las dos sintaxis. Por ejemplo:

$name = 'John';

// Simple syntax, prints Hello John
echo "Hello $name";

// Complex syntax, prints Hello John
echo "Hello {$name}";

Si hacemos el mismo experimento con arreglos:

$person = [
    'name' => 'John',
    'profession' => 'Programmer',
];

echo "Hello $person['name']";

¿Qué crees que devolverá el código anterior?

  • A) Hello John
  • B) Error de sintaxis
  • C) Indefinido

¡La respuesta correcta es B!

El mensaje es: syntax error, unexpected string content "", expecting "-" or identifier or variable or number.

Si consultas Sintaxis simple: ejemplo n.º 15 en la documentación sobre cadenas, encontrarás la causa:

Al interpolar una variable PHP que es un arreglo asociativo, si queremos acceder al valor de un índice específico, escribimos el índice sin comillas.

Si actualizamos el código a:

echo "Hello $person[name]";

¡Ahora funciona perfectamente!

Sin embargo, puede parecer extraño si estás acostumbrado a acceder a las claves del arreglo entre comillas. Si queremos usar el índice entre comillas, necesitamos la sintaxis compleja con llaves:

// Works, quoted keys only work using the curly brace syntax
echo "Hello {$person['name']}";

Es curioso cómo cosas aparentemente tan sencillas pueden tener tantas variaciones.

Referencias

PHP: interpolación de variables - Manual

PHP: cadenas - Manual