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>";
            }
        }
    }
}