变量数组名称

时间:2012-02-22 15:36:47

标签: php arrays

  

致命错误:不能将字符串偏移用作数组

当我尝试使用变量数组名称来查找数组键时出现:

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

如何使用变量数组名称执行此操作?

6 个答案:

答案 0 :(得分:2)

在那部分代码之后:

$arr = 'arr';

$ arr不再是一个数组。它只是一个包含'arr'字符串的变量。因此,您无法通过密钥访问它。

您应该阅读PHP: Arrays - Manual中的信息。

答案 1 :(得分: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();

答案 2 :(得分:2)

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

是您想要的(假设您实际将数组分配给$this->arr,而不仅仅是$arr稍后重新分配。

答案 3 :(得分:2)

$arr不是数组。你首先创建了一个但是它在这里获得了一个字符串变量:$arr = 'arr';

这是正确的:

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

$this->$arr[$somekey] 

答案 4 :(得分:2)

你首先将$ arr定义为一个数组,然后你用字符串写它的定义。相反,也许你想在列表中添加一个元素:

$arr = array();

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

echo $arr[$somekey]

我想,我现在知道你想要什么:

数组列表......

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

echo $arr['aaaaaaaaaaa'][$somekey]
所有的尖叫声都是怎么回事?

答案 5 :(得分:1)

说完后

$arr = 'arr';

变量$ arr不再是变量,您可能想要做的是将该值添加到数组中,在这种情况下尝试以下操作:

arr.push('arr');

然后它应该工作我认为