PHP:从嵌套数组(json)创建HTML表,但得到结果和“为foreach()提供的参数无效”
我试图从通过api/json获得的数组中创建一个HTML表 它是一个嵌套数组,实际数据嵌套在会话中PHP:从嵌套数组(json)创建HTML表,但得到结果和“为foreach()提供的参数无效”,php,arrays,json,foreach,nested,Php,Arrays,Json,Foreach,Nested,我试图从通过api/json获得的数组中创建一个HTML表 它是一个嵌套数组,实际数据嵌套在会话中 Array ( [sessid] => -hnkGi-k1rgwhnymkcScR0bom-RRKURn2S1pgMZoBX4 [status] => 0 [players] => Array ( [0] => Array ( [first_name] => Chris
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
看
如您所见,我可以提取所需的数据,并从中创建HTML表。
但是,我无法摆脱这两条错误消息
如果我去掉一个foreach,我只得到第一个值的第一个字符,在这种情况下,sessiond的第一个字符
我用来创建表的实际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之前,尝试执行第二个ifis_数组$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>";
}
}
}
}
我们可以看到$player数组吗?它在URL上可见,刚刚在原始帖子中添加了数组和警告消息。假设它是一个数组,并且只使用一个foreach循环,我为我调用的每个变量得到非法字符串偏移警告,在表中,它显示第一个变量的第一个字符它看到会话的第一个字符我刚刚用一个可能的答案更新了我的帖子。请尝试添加第二个is_数组$key并让我知道结果?谢谢,这很有效!!!我不明白为什么它会这样工作,但不用担心,这是因为在使用for-each对$key进行迭代之前,要确保它是一个数组。如果你相信答案是正确的,你能把它标记为答案吗?谢谢!