我得到一个奇怪的PHP错误后更新我的PHP版本到5.4.0-3。

我有这样一个数组:

Array
(
    [host] => 127.0.0.1
    [port] => 11211
)

当我试图像这样访问它时,我会得到奇怪的警告

 print $memcachedConfig['host'];
 print $memcachedConfig['port'];


 Warning: Illegal string offset 'host' in ....
 Warning: Illegal string offset 'port' in ...

我真的不想只是编辑我的php.ini并重新设置错误级别。


当前回答

这个问题有点晚了,但对于其他正在搜索的人来说:我通过使用错误的值(类型)初始化得到了这个错误:

$varName = '';
$varName["x"] = "test"; // causes: Illegal string offset

正确的做法是:

 $varName = array();
 $varName["x"] = "test"; // works

其他回答

只是以防它帮助任何人,我得到这个错误,因为我忘记反序列化一个序列化的数组。如果这适用于你的情况,我肯定会检查一下。

这对我来说很管用:

我的测试代码:

$var2['data'] = array ('a'=>'21','b'=>'32','c'=>'55','d'=>'66','e'=>'77');
foreach($var2 as $result)
{  
    $test = $result['c'];
}
print_r($test);

输出:55

看看吧,伙计们。谢谢

这里有很多很好的答案,但我发现我的问题要简单得多。

我试图运行以下命令:

$x['name']   = $j['name'];

并且我在$x['name']上得到这个非法字符串错误,因为我没有首先定义数组。因此,在尝试将内容分配给$x[]之前,我放入了以下代码行:

$x = array();

这招奏效了。

从PHP 5.4开始,我们需要传递与函数预期相同的数据类型值。例如:

function testimonial($id); // This function expects $id as an integer

当调用这个函数时,如果一个字符串值是这样提供的:

$id = $array['id']; // $id is of string type
testimonial($id); // illegal offset warning

这将生成一个非法偏移警告,因为数据类型不匹配。为了解决这个问题,你可以使用settype:

$id = settype($array['id'],"integer"); // $id now contains an integer instead of a string
testimonial($id); // now running smoothly

在我的情况下,我把mysql_fetch_assoc改为mysql_fetch_array并解决。它需要3天来解决:-(和我的项目的其他版本运行fetch assoc。