动态访问PHP数组

时间:2010-07-13 09:07:45

标签: php arrays

我尝试使用数组$this->$arrDataName[$key]中的密钥$key对元素$this->$arrDataName进行访问。但PHP解释错误。

我在{ }$arrDataName附近使用$this->{$arrDataName}[$key]进行了尝试,但它不起作用。

在php.net上我找到了一条建议,但我无法实现。

  

为了将变量变量与数组一起使用,您必须解决模糊问题。也就是说,如果你写$$ a [1],那么解析器需要知道你是否想要使用$ a [1]作为变量,或者你想要将$$作为变量,然后是[1]索引来自那个变量。解决这种歧义的语法是:第一种情况为$ {$ a [1]},第二种情况为$ {$ a} [1]。

也许任何人都可以帮助我。

谢谢!

修改

我认为它不起作用,但我忘了填充阵列 最后它有效。 :)
这是解决方案:$this->{$arrDataName}[$key]

4 个答案:

答案 0 :(得分:5)

您的语法正确无误:

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

您还可以使用额外的变量:

$myTempArr = $this->$arrDataName;

$myTempArr[ $key ];
恕我直言,可读性更好......

答案 1 :(得分:2)

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

这对我来说很完美,它打印FooBar

答案 2 :(得分:0)

我们假设你的数组是$this->arrDataName。您有$key,因此您的对象为$this->arrDataName[$key]

如果您想要名称存储在$this->arrDataName[$key]中的变量的内容,您应该这样做:

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

答案 3 :(得分:0)

嗯,据我所知,它有效。我在这里测试它:

<?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的正确性。打开debuging并显示PHP错误(包括通知)。也许你正在尝试阅读不存在的财产?

另外,您使用的是哪个PHP版本?我假设PHP5?