2012-02-22 83 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'); 

然后它应该工作,我认为