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

时间:2013-04-08 16:33:39

标签: php arrays

面对数组奇怪的情况.. 我正在使用LinkedIn API来获取以两种格式返回数据的个人资料信息..

如果用户只有一个教育项目

educations=>education=>school-name
educations=>education=>date
...

如果有多个教育项目

educations=>education=>0=>school-name
educations=>education=>0=>date
...
educations=>education=>1=>school-name
educations=>education=>1=>date
...

现在我正在尝试使其保持一致并转换

educations=>education=>school-name

educations=>education=>0=>school-name

但是我认为应该有效的代码出错

if(empty($educations['education'][0]['school-name']))
{
    $temp = array();
    $temp['education'][0]=$educations['education'];
    $educations = $temp;
}

“仅一个教育项目”失败,在(isset,is_array和empty)的第一行生成错误

PHP Fatal error:  Cannot use string offset as an array in ...

print_r返回

[educations] => Array
    (
        [education] => Array
            (
                     [id] => 109142639
                     [school-name] => St. Fidelis College
                     [end-date] => Array
                         (
                             [year] => 2009
                         )

            )

    )

4 个答案:

答案 0 :(得分:2)

通常你会写这样的作业:

$temp = array(
    "education" => array($educations['education'])
);

避免索引出现任何问题。这也可能会解决你的问题。

如果您不确定$educations['education'][0]['school-name']的内容,可以查看每个部分:

if(isset($educations['education'], $educations['education'][0], $educations['education'][0]['school-name']))

这可行,因为isset 的行为与正常功能相同。它以懒惰的方式接受多个参数。

答案 1 :(得分:1)

你想:

if(array_key_exists('school-name',$educations['education']))
{
    $educations['education'] = array($educations['education']);
}

答案 2 :(得分:1)

今天我在申请中遇到了同样的问题。致命错误:不能在第2447行的/home/servers/bf4c/bf4c.php中使用字符串偏移作为数组

第2447行

if (!isset($time_played[$player]["started"])) {
                    $time_played[$player]["started"] = $time;
                }

$ time_played被别处覆盖并定义为字符串。因此,请确保使用唯一的变量名称。

答案 3 :(得分:0)

如果你正在经历一个循环,那么这是一个提示,它会中断:

if( $myArray != "" ){
  // Do your code here 

  echo $myArray['some_id'];
}