2012-02-22 82 views
0

Fatal error: Cannot use string offset as an array變量數組名

,當我嘗試使用變量數組名稱找到一個數組的鍵時出現:

class FOO { 
    protected $arr = array(); 
    function bar(){ 
     $aaaaaaaaaaaa = 'arr'; 
     $this->$aaaaaaaaaaaa[$somekey]; // <-- error 
     ... 
    } 
} 

我怎樣才能做到這一點與數組變量的名字呢?

+0

看到相關的帖子http://stackoverflow.com/questions/9374292/variable-name-as-variable – Kaii 2012-02-22 15:40:26

+0

確定編輯我希望它現在清除 – thelolcat 2012-02-22 15:44:42

+0

我編輯我的答案,但是,這並不明顯。 – mindandmedia 2012-02-22 16:03:31

回答

2

@ MarcinJuraszek的權利,當你第二次分配$arr它不再是一個數組。

無論如何,我相信這個代碼,你打算

<?php 
class foo 
{ 
    public function doStuff() 
    { 
     $name = 'arr'; 
     $this->{$name} = array('Hello world!'); 
     echo $this->{$name}[0]; 
    } 
} 

$obj = new foo; 
$obj->doStuff(); 
+0

多數民衆贊成它。謝謝你:D – thelolcat 2012-02-22 15:43:13

2

的代碼部分之後:

$arr = 'arr'; 

$ ARR是沒有更多的陣列。它只是一個包含'arr'字符串的變量。所以你不能通過鍵來訪問它。

您應該閱讀PHP: Arrays - Manual的信息。

+0

好吧我知道:)'...'是財產申報結束和方法開始的地方.. – thelolcat 2012-02-22 15:39:21

+0

那麼你應該更準確地描述你的問題下次更多...... – devOp 2012-02-22 15:43:34

2
$this->{$arr}[$somekey] 

什麼是你想要的(前提是你實際分配陣列$this->arr,不只是$arr您稍後重新分配。

2

$arr不是數組,你首先創建了一個,但是在這裏得到一個字符串變量:$arr = 'arr';

這是正確的:

$arr = array(); 
$arr[] = 'arr'; 
$somekey = 0; 

$this->$arr[$somekey] 
2

你第一次定義$改編爲數組,然後你過寫作的定義有一個字符串。相反,也許你想要一個元素添加到列表:

$arr = array(); 

$somekey = 'mykey'; 
$arr[$somekey] = 'arrVal'; 

echo $arr[$somekey] 

我想,我知道你現在想要什麼:

陣列列表...

$arr = array(): 
$arr['aaaaaaaaaa'] = array(); 
$arr['aaaaaaaaaa'][$somekey] = 'arrVal'; 

echo $arr['aaaaaaaaaaa'][$somekey] 

,什麼是與所有的尖叫?

1

說後

$arr = 'arr'; 

變量$ ARR不再是一個變量,可能是你想要做的是,值添加到陣列中的這種情況下,請嘗試以下操作:

arr.push('arr'); 

然後它應該工作,我認爲