我尝试使用数组$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]
答案 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?