Динамический доступ к массиву PHP

Я попытался получить доступ с $this->$arrDataName[$key] к элементу с ключом $key из массива $this->$arrDataName . Но PHP интерпретирует это неправильно.

Я попробовал его с { } вокруг $arrDataName до $this->{$arrDataName}[$key] , но он не работает.

На php.net я нашел совет, но я не могу этого понять.

Чтобы использовать переменные переменные с массивами, вы должны решить проблему двусмысленности. То есть, если вы пишете $$ a [1], тогда анализатор должен знать, хотите ли вы использовать $ a [1] в качестве переменной или если вы хотите $$ a как переменную, а затем индекс [1] из эта переменная. Синтаксис для устранения этой двусмысленности: $ {$ a [1]} для первого случая и $ {$ a} [1] для второго.

Возможно, кто-нибудь может мне помочь.

Благодаря!

РЕДАКТИРОВАТЬ:

Я думаю, что это не сработает, но я забыл заполнить массив.
Наконец, это работает. 🙂
Это решение: $this->{$arrDataName}[$key]

Ваш синтаксис верен:

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

Для этого также можно использовать дополнительную переменную:

 $myTempArr = $this->$arrDataName; $myTempArr[ $key ]; 

ИМХО, читаемость лучше всего …

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

Это отлично сработало для меня, это напечатало FooBar .

Предположим, что ваш массив равен $this->arrDataName . У вас есть $key , поэтому ваш объект будет $this->arrDataName[$key] .

Если вы хотите, чтобы содержимое переменной, имя которой хранилось в $this->arrDataName[$key] вы должны сделать это:

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

Ну, насколько я знаю, это работает. Вот как я его протестировал:

 <?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'); ?> 

И выход:

 b y 

Проверьте правильность $arrDataName . Включите отладку и отображение PHP erros (включая уведомления). Может быть, вы пытаетесь читать несуществующую собственность?

Кроме того, какую версию PHP вы используете? Я предполагаю, PHP5?