Я попытался получить доступ с $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?