Динамический доступ к массиву 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]

5
задан CSchulz 13 July 2010 в 09:25
поделиться

4 ответа

Ваш синтаксис правильный:

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

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

$myTempArr = $this->$arrDataName;

$myTempArr[ $key ];

ИМХО, читабельность так лучше...

5
ответ дан 14 December 2019 в 08:40
поделиться
<?php
    class Foo {
        public function __construct() {
            $this->myArray = array('FooBar');
            $arrayName = 'myArray';
            echo $this->{$arrayName}[0];
        }
    }
    new Foo;

У меня это сработало идеально, вывело FooBar.

2
ответ дан 14 December 2019 в 08:40
поделиться

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

<?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 (включая уведомления). Может быть, вы пытаетесь прочитать несуществующее свойство?

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

.
0
ответ дан 14 December 2019 в 08:40
поделиться

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

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

<?php
    echo ${$this->arrDataName[$key]};
?>
0
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: