2010-07-13 103 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