PHP:从嵌套数组 (json) 创建 HTML table 但得到结果 AND "invalid argument supplied for foreach()"
PHP: creating HTML table from nested array (json) but getting results AND "invalid argument supplied for foreach()"
我正在尝试从通过 api/json 获得的数组创建 HTML table。
这是一个嵌套数组(实际数据嵌套在会话中)
Array
(
[sessid] => -hnkGi-k1rgwhnymkcScR0bom-RRKURn2S1pgMZoBX4
[status] => 0
[players] => Array
(
[0] => Array
(
[first_name] => Chris
[last_name] => Clausing
[pdga_number] => 31635
[rating] => 930
[year] => 2014
[class] => A
[gender] => M
[bracket] => Open
[country] => NL
[state_prov] =>
[tournaments] => 11
[rating_rounds_used] => 36
[points] => 998
[prize] => 0.00
)
[1] => Array
(
[first_name] => Uwe Walter
[last_name] => Schlueter
[pdga_number] => 37788
[rating] => 902
[year] => 2014
[class] => A
[gender] => M
[bracket] => Master
[country] => NL
[state_prov] =>
[tournaments] => 12
[rating_rounds_used] => 33
[points] => 970
[prize] => 0.00
)
[2] => Array
(
[first_name] => Mark
[last_name] => Steenhuis
[pdga_number] => 50574
[rating] => 859
[year] => 2014
[class] => A
[gender] => M
[bracket] => Master
[country] => NL
[state_prov] =>
[tournaments] => 12
[rating_rounds_used] => 28
[points] => 678
[prize] => 0.00
)
)
)
以及警告信息:
Warning: Invalid argument supplied for foreach() in /home/surrealm/dvh/player_statistics.php on line 103
Warning: Invalid argument supplied for foreach() in /home/surrealm/dvh/player_statistics.php on line 103
参见 http://vliegende-hollander.com/player_statistics.php?year=2014&class=A&gender=M&country=NL
如您所见,我可以提取所需的数据,并从中创建 HTML table。
但是,我无法摆脱这两条错误消息。
如果我去掉其中一个 foreach(),我只会得到第一个值的第一个字符(在本例中,是 sessid 的第一个字符)。
我用来创建 table 的 PHP 的实际位是:
<?
if (is_array($player)) {
foreach($player as $key){
foreach($key as $k){ // <- this is line 103
echo "<tr>";
echo "<td>".$k['pdga_number']."</td>";
echo "<td>".$k['first_name']." ".$k['last_name']."</td>";
echo "<td>".$k['country']."</td>";
echo "<td>".$k['rating']."</td>";
echo "</tr>";
}
}
}
?>
任何人都可以帮我清理这段代码,以便我摆脱这两个警告吗?
我不是专职程序员,所以可能只是我对 foreach() 函数没有完全理解。
我通常使用 MySQL 和 while() 循环来提取和显示数据。
错误表明您传递给 for each 的 $key
变量不是数组。为此,player
数组必须在其中包含数组(即多维数组),因此第二个 foreach
可以遍历它。
如果你的播放器数组里面没有数组,那么你只需要一个foreach
循环,然后你就可以使用索引访问数据(即 $key['pdga_number']
而不是 $k['pdga_number']
)。
为了让我全力提供帮助,我需要知道 $player
数组的内容。
编辑
我刚看过给出的示例,尝试在调用第二个 foreach 之前执行第二个 if(is_array($key)
,即
if (is_array($player)) {
foreach($player as $key){
if(is_array($key)){
foreach($key as $k){ // <- this is line 103
echo "<tr>";
echo "<td>".$k['pdga_number']."</td>";
echo "<td>".$k['first_name']." ".$k['last_name']."</td>";
echo "<td>".$k['country']."</td>";
echo "<td>".$k['rating']."</td>";
echo "</tr>";
}
}
}
}
我正在尝试从通过 api/json 获得的数组创建 HTML table。
这是一个嵌套数组(实际数据嵌套在会话中)
Array
(
[sessid] => -hnkGi-k1rgwhnymkcScR0bom-RRKURn2S1pgMZoBX4
[status] => 0
[players] => Array
(
[0] => Array
(
[first_name] => Chris
[last_name] => Clausing
[pdga_number] => 31635
[rating] => 930
[year] => 2014
[class] => A
[gender] => M
[bracket] => Open
[country] => NL
[state_prov] =>
[tournaments] => 11
[rating_rounds_used] => 36
[points] => 998
[prize] => 0.00
)
[1] => Array
(
[first_name] => Uwe Walter
[last_name] => Schlueter
[pdga_number] => 37788
[rating] => 902
[year] => 2014
[class] => A
[gender] => M
[bracket] => Master
[country] => NL
[state_prov] =>
[tournaments] => 12
[rating_rounds_used] => 33
[points] => 970
[prize] => 0.00
)
[2] => Array
(
[first_name] => Mark
[last_name] => Steenhuis
[pdga_number] => 50574
[rating] => 859
[year] => 2014
[class] => A
[gender] => M
[bracket] => Master
[country] => NL
[state_prov] =>
[tournaments] => 12
[rating_rounds_used] => 28
[points] => 678
[prize] => 0.00
)
)
)
以及警告信息:
Warning: Invalid argument supplied for foreach() in /home/surrealm/dvh/player_statistics.php on line 103
Warning: Invalid argument supplied for foreach() in /home/surrealm/dvh/player_statistics.php on line 103
参见 http://vliegende-hollander.com/player_statistics.php?year=2014&class=A&gender=M&country=NL
如您所见,我可以提取所需的数据,并从中创建 HTML table。 但是,我无法摆脱这两条错误消息。
如果我去掉其中一个 foreach(),我只会得到第一个值的第一个字符(在本例中,是 sessid 的第一个字符)。
我用来创建 table 的 PHP 的实际位是:
<?
if (is_array($player)) {
foreach($player as $key){
foreach($key as $k){ // <- this is line 103
echo "<tr>";
echo "<td>".$k['pdga_number']."</td>";
echo "<td>".$k['first_name']." ".$k['last_name']."</td>";
echo "<td>".$k['country']."</td>";
echo "<td>".$k['rating']."</td>";
echo "</tr>";
}
}
}
?>
任何人都可以帮我清理这段代码,以便我摆脱这两个警告吗?
我不是专职程序员,所以可能只是我对 foreach() 函数没有完全理解。 我通常使用 MySQL 和 while() 循环来提取和显示数据。
错误表明您传递给 for each 的 $key
变量不是数组。为此,player
数组必须在其中包含数组(即多维数组),因此第二个 foreach
可以遍历它。
如果你的播放器数组里面没有数组,那么你只需要一个foreach
循环,然后你就可以使用索引访问数据(即 $key['pdga_number']
而不是 $k['pdga_number']
)。
为了让我全力提供帮助,我需要知道 $player
数组的内容。
编辑
我刚看过给出的示例,尝试在调用第二个 foreach 之前执行第二个 if(is_array($key)
,即
if (is_array($player)) {
foreach($player as $key){
if(is_array($key)){
foreach($key as $k){ // <- this is line 103
echo "<tr>";
echo "<td>".$k['pdga_number']."</td>";
echo "<td>".$k['first_name']." ".$k['last_name']."</td>";
echo "<td>".$k['country']."</td>";
echo "<td>".$k['rating']."</td>";
echo "</tr>";
}
}
}
}