我在一个数组上收到一个"非法字符串偏移"错误,其中有我试图访问的键:
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;
}