我得到一个奇怪的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并重新设置错误级别。


当前回答

错误非法字符串偏移'whatever'在…通常意味着:你试图使用一个字符串作为一个完整的数组。

这实际上是可能的,因为字符串在php中可以被视为单个字符的数组。所以你认为$var是一个带键的数组,但它只是一个带标准数字键的字符串,例如:

$fruit_counts = array('apples'=>2, 'oranges'=>5, 'pears'=>0);
echo $fruit_counts['oranges']; // echoes 5
$fruit_counts = "an unexpected string assignment";
echo $fruit_counts['oranges']; // causes illegal string offset error

你可以在这里看到它的作用: http://ideone.com/fMhmkR

对于那些遇到这个问题试图将错误的模糊性转化为解决它的方法的人,就像我一样。

其他回答

我认为这条消息的唯一原因是因为目标数组实际上是一个数组,如字符串等(JSON -> {"host": "127.0.0.1"})变量

这是一个旧的,但如果有人能从中受益。 如果数组为空,也会得到这个错误。

在我的情况下,我有:

$buyers_array = array();
$buyers_array = tep_get_buyers_info($this_buyer_id); // returns an array
...
echo $buyers_array['firstname'] . ' ' . $buyers_array['lastname']; 

我改为:

$buyers_array = array();
$buyers_array = tep_get_buyers_info($this_buyer_id); // returns an array
...
if(is_array($buyers_array)) {
   echo $buyers_array['firstname'] . ' ' . $buyers_array['lastname']; 
} else {
   echo 'Buyers id ' . $this_buyer_id . ' not found';
}

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

我试图运行以下命令:

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

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

$x = array();

这招奏效了。

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

为PHP

//Setup Array like so
$memcachedConfig = array(
  "host" => "127.0.0.1",
  "port" => "11211"
);

//Always a good practice to check if empty

if(isset($memcachedConfig['host']) && isset($memcachedConfig['port'])){

    //Some codes

    print_r ($memcachedConfig['host']);
    print_r ($memcachedConfig['port']);

}

只要确保返回的值不为空。 这个例子是PHP的看看如何在其他语言中检查数组是否为空。