2017-04-20 33 views
0

内部多维数组我“米试图遍历目标i上的”米从openweather.comPHP的为什么穿越的foreach()不工作

得到没有在foreach()I“米获得正确的结果。在foreach()内我得到一个错误

PHP代码:

$contents = file_get_contents($url); 
$clima=json_decode($contents,TRUE); 

echo $clima['list'][5]['main']['temp']; // this one works 

$i=0; 
foreach($clima['list'] as $clima1) { 
    echo $clima1[$i]['dt']; // here i get PHP Notice: Undefined offset 

    echo $clima1[$i]['main']['temp']; //here i get PHP Notice: Undefined index: list 

    $i=$i+1; 
} 

我得到的错误是:

PHP Notice: Undefined offset: 0 // the error is from 0 to 39 and there are 39 objects... 
PHP Notice: Undefined index: list 

对象起止样品部分:

Array ([cod] => 200 [message] => 0.014 [cnt] => 40 [list] => 
Array ([0] => Array ([dt] => 1492732800 [main] => Array ([temp] => 17.64 [temp_min] => 17.04 [temp_max] => 17.64 [pressure] => 1026.03 [sea_level] => 1031.21 [grnd_level] => 1026.03 [humidity] => 100 [temp_kf] => 0.6) [weather] => Array ([0] => Array ([id] => 800 [main] => Clear [description] => clear sky [icon] => 01n)) [clouds] => Array ([all] => 0) [wind] => Array ([speed] => 1.66 [deg] => 81.5008) [sys] => Array ([pod] => n) [dt_txt] => 2017-04-21 00:00:00) 
     [38] => Array ([dt] => 1493143200 [main] => Array ([temp] => 19.72 [temp_min] => 19.72 [temp_max] => 19.72 [pressure] => 1026.92 [sea_level] => 1032.02 [grnd_level] => 1026.92 [humidity] => 87 [temp_kf] => 0) [weather] => Array ([0] => Array ([id] => 800 [main] => Clear [description] => clear sky [icon] => 01n)) [clouds] => Array ([all] => 0) [wind] => Array ([speed] => 6.95 [deg] => 10.5008) [sys] => Array ([pod] => n) [dt_txt] => 2017-04-25 18:00:00) 
     [39] => Array ([dt] => 1493154000 [main] => Array ([temp] => 18.43 [temp_min] => 18.43 [temp_max] => 18.43 [pressure] => 1026.75 [sea_level] => 1031.91 [grnd_level] => 1026.75 [humidity] => 98 [temp_kf] => 0) [weather] => Array ([0] => Array ([id] => 800 [main] => Clear [description] => clear sky [icon] => 01n)) [clouds] => Array ([all] => 0) [wind] => Array ([speed] => 6.03 [deg] => 9.50076) [sys] => Array ([pod] => n) [dt_txt] => 2017-04-25 21:00:00)) 
[city] => Array ([id] => **** [name] => ***** [coord] => Array ([lat] => **.**** [lon] => **.****) [country] => **)) 

任何帮助理解我的失误可以理解

+0

'$ clima1 [ 'DT']'和'$ clima1 [ '主'] [ '临时']'。你为什么还要在那里加上'$ i'? – zerkms

+0

只是删除'[$ i]'? – Philipp

+0

我误解了var_dump的输出。我删除了[$ 1],现在没关系。谢谢,所有3个答案帮助我了解我的错误 – ic205

回答

1

看来,你循环“双”。循环内部的计数器是您不需要的部分,因为您已经用foreach循环遍历数组。

我想,下面的代码将是更好的办法

$contents = file_get_contents($url); 
$clima=json_decode($contents,TRUE); 

echo $clima['list'][5]['main']['temp']; // this one works 

foreach($clima['list'] as $clima1) { 
    echo $clima1['dt']; // here i get PHP Notice: Undefined offset 

    echo $clima1['main']['temp']; //here i get PHP Notice: Undefined index: list 
} 
1

这是因为当你的foreach在$clima['list']你会进去$清风[每值“列表“]。因此,首先,$clima1 = $clima['list'][0]。在此之后,$clima1 = $clima['list'][1] ...因此,$ clima1既没有0作为索引,也没有1也没有2 ...

你可以做些什么,看得更清楚的是:

foreach($clima['list'] as $key => $clima1) 

而且每次, $键将是您的$ id。因此,你可以摆脱你的$ id的,只是不喜欢这样写道:

foreach($clima['list'] as $id => $clima1) 
1

当您运行foreach($clima['list'] as $clima1) { ...在环($clima1)每个对象等于​​,所以你不需要手动将$i在那里。

如果你真的卡住我只是运行像循环:

foreach($clima['list'] as $clima1) { 
    var_dump('<pre>' . $clima1 . '</pre>'); 
} 

要看到什么$clima1变量确实是。