0

面对数组的奇怪情况..我正在使用 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

4 回答 4

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 的行为不像正常功能。它以一种惰性的方式接受多个参数。

于 2013-04-08T16:35:31.410 回答
1

你要:

if(array_key_exists('school-name',$educations['education']))
{
    $educations['education'] = array($educations['education']);
}
于 2013-04-08T16:36:07.573 回答
1

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

第 2447 行

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

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

于 2014-02-17T16:54:51.287 回答
0

如果您正在循环运行,这里有一个提示,它会中断:

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

  echo $myArray['some_id'];
}

于 2014-12-03T20:10:04.623 回答