2010-07-13 115 views
5

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

我试过{ }围绕$arrDataName$this->{$arrDataName}[$key],但它不起作用。

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

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

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

谢谢!

编辑:

我认为这是行不通的,但我忘了填阵列。
最后它的工作原理。 :)
这是解决方案:$this->{$arrDataName}[$key]

+0

尝试接受其中一个答案,然后:) – 2010-07-13 09:36:33

回答

5

你的语法是正确的:

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

你也可以使用一个额外的变量此:

$myTempArr = $this->$arrDataName; 

$myTempArr[ $key ]; 

恕我直言,可读性这样更好...

+0

感谢您的意见。 我知道这种方式,但我寻找的是单线解决方案。;) – CSchulz 2010-07-13 09:11:56

+0

我刚刚测试了语法,它是正确的。也许你有另一个问题... – Macmade 2010-07-13 09:16:30

+0

我发现我的问题。 指定的数组是空的。 -.- – CSchulz 2010-07-13 09:26:31

0

我们假设你的数组是$this->arrDataName。你有一个$key,所以你的对象将是$this->arrDataName[$key]

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

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

对不起,但我不明白,这将如何帮助我。 – CSchulz 2010-07-13 09:20:40

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

此外,您使用哪个PHP版本?我假设PHP5?

+0

...和一条评论 - 如果可能的话,最好不要使用这个魔法。稍后,您会遇到问题,无法理解您想要做什么。相信我:) – 2010-07-13 09:19:49

+0

我使用PHP 5.3.1,并没有任何错误或通知。 – CSchulz 2010-07-13 09:22:49

+0

@ H3llGhost:您已将'error_reporting'设置为'E_ALL | E_STRICT'?并且'display_errors'已启用? – NikiC 2010-07-13 09:24:52

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

这对我来说非常合适,它印上了FooBar

+0

是的,它也适用于我。 ;) 谢谢。 – CSchulz 2010-07-13 09:24:46