PHP 5.5.12合法数组中存在非法的字符串偏移


PHP 5.5.12 Illegal string offset On A Valid Array

我在一个数组上收到一个"非法字符串偏移"错误,其中有我试图访问的键:

PHP版本5.5.12

这会导致错误:

$avg = $season['avg'];
下面是var_dump($season)的结果:
array (size=38)
    'hr' => string '4' (length=1)
    'gidp' => string '2' (length=1)
    'irs' => string '0' (length=1)
    'np' => string '819' (length=3)
    'team_count' => string '1' (length=1)
    'era' => string '2.13' (length=4)
    'sport_code' => string 'mlb' (length=3)
    'sho' => string '0' (length=1)
    'bk' => string '0' (length=1)
    'sport_id' => string '1' (length=1)
    'sv' => string '0' (length=1)
    'avg' => string '.216' (length=4)
    'whip' => string '0.88' (length=4)
    'bb' => string '6' (length=1)
    'ir' => string '0' (length=1)
    'g' => string '9' (length=1)
    'so' => string '39' (length=2)
    'tbf' => string '244' (length=3)
    'wp' => string '1' (length=1)
    'sport' => string 'MLB' (length=3)
    'l' => string '2' (length=1)
    'svo' => string '0' (length=1)
    'hb' => string '3' (length=1)
    'h' => string '50' (length=2)
    'ip' => string '63.1' (length=4)
    'w' => string '4' (length=1)
    's' => string '561' (length=3)
    'ao' => string '46' (length=2)
    'season' => string '2014' (length=4)
    'r' => string '17' (length=2)
    'go_ao' => string '2.17' (length=4)
    'cg' => string '1' (length=1)
    'player_id' => string '218596' (length=6)
    'ab' => string '231' (length=3)
    'gs' => string '9' (length=1)
    'ibb' => string '1' (length=1)
    'er' => string '15' (length=2)
    'go' => string '100' (length=3);

这个数组是从一个更大的数组中剥离出来的,这个数组是通过在web请求上使用json_decode创建的。我可以访问数据的父数组来提取它。

我很茫然。我试过铸造它。Gettype返回'array'。如有任何意见,不胜感激。

感谢

//编辑:

我简化了上面的问题。下面是一个更准确的例子:

public function getPitcherAvg($id)
{
    $stats = $this->getPitcherStats($id);
    $stats = $stats['sport_pitching_composed']['sport_pitching_agg']['queryResults']['row'];
    foreach ($stats as $season)
    {
        if ($season['season'] == 2014)
        {
            $avg = $season['avg'];
        }
    }
    return $avg;
}

public function getPitcherStats($id)
{
    $year = date("Y");
    $url = "http://mlb.mlb.com/lookup/json/named.sport_pitching_composed.bam?game_type=%27R%27&sport_code=%27mlb%27&sort_by=%27season_asc%27&player_id={$id}&sport_pitching_composed.season=2014";
    $json = file_get_contents($url);
    return json_decode($json, true);
}

原来我的数据格式不一致(有时数组没有嵌套)。

修改:

public function getPitcherAvg($id)
{
    $stats = $this->getPitcherStats($id);
    $stats = $stats['sport_pitching_composed']['sport_pitching_agg']['queryResults']['row'];
    foreach ($stats as $season)
    {
        if ($season['season'] == 2014)
        {
            $avg = $season['avg'];
        }
    }
    return $avg;
}

:

public function getPitcherAvg($id)
{
    $stats = $this->getPitcherStats($id);
    $seasons = $stats['sport_pitching_composed']['sport_pitching_agg']['queryResults']['row'];
    foreach ($seasons as $key => $season)
    {
        if (!is_array($season))
        {
            if ($key == 'avg') $avg = $season;
        }           
        elseif ($season['season'] == 2014)
        {
            $avg = $season['avg'];
        }
    }
    return $avg;
}