致命错误:不能将字符串偏移用作数组
当我尝试使用变量数组名称来查找数组键时出现:
class FOO {
protected $arr = array();
function bar(){
$aaaaaaaaaaaa = 'arr';
$this->$aaaaaaaaaaaa[$somekey]; // <-- error
...
}
}
如何使用变量数组名称执行此操作?
答案 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');
然后它应该工作我认为