2010-07-13 19 views
5

He intentado acceder con $this->$arrDataName[$key] en el elemento con la clave $key de la matriz $this->$arrDataName. Pero PHP interpreta eso mal.Acceso dinámico a una matriz PHP

Lo intenté con { } alrededor de $arrDataName a $this->{$arrDataName}[$key], pero no funciona.

En php.net encontré un consejo, pero no puedo darme cuenta.

Para utilizar variables variables con matrices, debe resolver un problema de ambigüedad. Es decir, si escribe $$ a [1], el analizador necesita saber si tenía la intención de usar $ a [1] como variable, o si quería $$ a como la variable y luego el índice [1] de esa variable. La sintaxis para resolver esta ambigüedad es: $ {$ a [1]} para el primer caso y $ {$ a} [1] para el segundo.

Quizás alguien me pueda ayudar.

Gracias!

EDIT:

Creo que no funciona, pero se me olvidó llenar la matriz.
Finalmente funciona. :)
Esta es la solución: $this->{$arrDataName}[$key]

+0

Intente aceptar una de las respuestas, entonces :) –

Respuesta

5

Su sintaxis es correcta:

$this->{$varName}[$key] 

También puede utilizar una variable adicional para esto:

$myTempArr = $this->$arrDataName; 

$myTempArr[ $key ]; 

en mi humilde opinión, la legibilidad es mejor así ...

+0

Gracias por el consejo. Lo sé de esa manera, pero busco la solución de una sola línea.;) – CSchulz

+0

Acabo de probar la sintaxis, y es correcta. Tal vez tengas otro problema ... – Macmade

+0

Encontré mi problema. La matriz especificada estaba vacía. -.- – CSchulz

0

Supongamos que su matriz es $this->arrDataName. Tiene un $key, por lo que su objeto sería $this->arrDataName[$key].

Si desea que el contenido de la variable cuyo nombre se almacena en $this->arrDataName[$key] usted debe hacer esto:

<?php 
    echo ${$this->arrDataName[$key]}; 
?> 
+0

Lo siento, pero no puedo entender, cómo eso me ayudará. – CSchulz

0

Bueno, por lo que yo sé, funciona. Aquí cómo he comprobado:

<?php 
class tis 
{ 
    var $a = array('a', 'b', 'c'); 
    var $b = array('x', 'y', 'z'); 

    public function read($var) 
    { 
     echo $this->{$var}[1].'<br />'; 
    } 
} 

$t = new tis(); 
$t->read('a'); 
$t->read('b'); 
?> 

Y la salida:

b 
y 

Comprobar la corrección de $arrDataName. Active la depuración y muestre los errores de PHP (incluidos los avisos). ¿Tal vez estás tratando de leer una propiedad no existente?

Además, ¿qué versión de PHP utiliza? Supongo que PHP5?

+0

... y un comentario: si es posible, es mejor no usar esta magia. Más adelante, tendrás problemas para entender lo que querías hacer. Créame :) –

+0

Uso PHP 5.3.1 y no hay ningún error o aviso. – CSchulz

+0

@ H3llGhost: Ha establecido 'error_reporting' en' E_ALL | E_STRICT'? Y 'display_errors' está habilitado? – NikiC

2
<?php 
    class Foo { 
     public function __construct() { 
      $this->myArray = array('FooBar'); 
      $arrayName = 'myArray'; 
      echo $this->{$arrayName}[0]; 
     } 
    } 
    new Foo; 

Esto funcionó perfectamente para mí, imprimió FooBar.

+0

Sí, funcionó para mí también. ;) Gracias. – CSchulz