How can I parse JSON into a html table using PHP?
I have to get a table in my website. And have to get the data for this table from "http://west.basketball.nl/db/json/stand.pl?szn_Naam=2014-2015&cmp_ID=373" I've tried a lot of thing but nothing works....
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<?php
$json=file_get_contents("http://west.basketball.nl/db/json
/stand.pl?szn_Naam=2014-2015&cmp_ID=373");
$data = json_decode($json);
if (count($data)) {
// Open the table
echo "<table>";
// Cycle through the array
foreach ($data as $stand) {
// Output a row
echo "<tr>";
echo "<td>$afko</td>";
echo "<td>$positie</td>";
echo "</tr>";
}
// Close the table
echo "</table>";
}
?>
</body>
</html>
If you want recursive way:
public static function jsonToDebug($jsonText = '')
{
$arr = json_decode($jsonText, true);
$html = "";
if ($arr && is_array($arr)) {
$html .= self::_arrayToHtmlTableRecursive($arr);
}
return $html;
}
private static function _arrayToHtmlTableRecursive($arr) {
$str = "<table><tbody>";
foreach ($arr as $key => $val) {
$str .= "<tr>";
$str .= "<td>$key</td>";
$str .= "<td>";
if (is_array($val)) {
if (!empty($val)) {
$str .= self::_arrayToHtmlTableRecursive($val);
}
} else {
$str .= "<strong>$val</strong>";
}
$str .= "</td></tr>";
}
$str .= "</tbody></table>";
return $str;
}
Then call echo YourClass::jsonToDebug($jsonText)
;
My test on http://sandbox.onlinephpfunctions.com/
Ok first thing to do when getting data from an external source is to understand what is being returned.
So do
<?php
$json=file_get_contents("http://west.basketball.nl/db/json/stand.pl?szn_Naam=2014-2015&cmp_ID=373");
$data = json_decode($json);
print_r($data);
Result:
stdClass Object
(
[stand] => Array
(
[0] => stdClass Object
(
[afko] => Risne Stars HS 1
[ID] => 2091
[status] => Actief
[gespeeld] => 3
[percentage] => 100.0
[punten] => 6
[tegenscore] => 149
[eigenscore] => 191
[datum] => 2014-10-05
[saldo] => 42
[team] => Risne Stars Heren 1
[positie] => 1
)
[1] => stdClass Object
(
[afko] => D.B.V. Arriba HS 2
[ID] => 1813
[status] => Actief
[gespeeld] => 2
[percentage] => 0.0
[punten] => 0
[tegenscore] => 116
[eigenscore] => 102
[datum] => 2014-10-05
[saldo] => -14
[team] => D.B.V. Arriba Heren 2
[positie] => 10
)
[2] => stdClass Object
(
[afko] => The Valley Bucketeers HS 2
[ID] => 2430
[status] => Actief
[gespeeld] => 2
[percentage] => 0.0
[punten] => 0
[tegenscore] => 177
[eigenscore] => 70
[datum] => 2014-10-05
[saldo] => -107
[team] => The Valley Bucketeers Heren 2
[positie] => 11
)
[3] => stdClass Object
(
[afko] => Uitsmijters HS 2
[ID] => 2143
[status] => Actief
[gespeeld] => 2
[percentage] => 100.0
[punten] => 4
[tegenscore] => 79
[eigenscore] => 161
[datum] => 2014-10-05
[saldo] => 82
[team] => Uitsmijters Heren 2
[positie] => 2
)
[4] => stdClass Object
(
[afko] => Picker Reds HS 1
[ID] => 2056
[status] => Actief
[gespeeld] => 3
[percentage] => 66.7
[punten] => 4
[tegenscore] => 193
[eigenscore] => 184
[datum] => 2014-10-05
[saldo] => -9
[team] => Picker Reds Heren 1
[positie] => 3
)
[5] => stdClass Object
(
[afko] => Peatminers HS 2
[ID] => 6247
[status] => Actief
[gespeeld] => 1
[percentage] => 100.0
[punten] => 2
[tegenscore] => 36
[eigenscore] => 64
[datum] => 2014-10-05
[saldo] => 28
[team] => Peatminers Heren 2
[positie] => 4
)
[6] => stdClass Object
(
[afko] => Jolly Jumpers HS 1
[ID] => 1994
[status] => Actief
[gespeeld] => 2
[percentage] => 50.0
[punten] => 2
[tegenscore] => 103
[eigenscore] => 119
[datum] => 2014-10-05
[saldo] => 16
[team] => Jolly Jumpers Heren 1
[positie] => 5
)
[7] => stdClass Object
(
[afko] => TONEGO '65 HS 2
[ID] => 2120
[status] => Actief
[gespeeld] => 2
[percentage] => 50.0
[punten] => 2
[tegenscore] => 107
[eigenscore] => 122
[datum] => 2014-10-05
[saldo] => 15
[team] => TONEGO '65 Heren 2
[positie] => 6
)
[8] => stdClass Object
(
[afko] => Amical HS 2
[ID] => 1791
[status] => Actief
[gespeeld] => 3
[percentage] => 33.3
[punten] => 2
[tegenscore] => 180
[eigenscore] => 195
[datum] => 2014-10-05
[saldo] => 15
[team] => Amical Heren 2
[positie] => 7
)
[9] => stdClass Object
(
[afko] => S.V.Z.W. HS 2
[ID] => 5526
[status] => Actief
[gespeeld] => 3
[percentage] => 33.3
[punten] => 2
[tegenscore] => 174
[eigenscore] => 151
[datum] => 2014-10-05
[saldo] => -23
[team] => S.V.Z.W. Heren 2
[positie] => 8
)
[10] => stdClass Object
(
[afko] => Twente Buzzards HS 3
[ID] => 2294
[status] => Actief
[gespeeld] => 3
[percentage] => 33.3
[punten] => 2
[tegenscore] => 196
[eigenscore] => 151
[datum] => 2014-10-05
[saldo] => -45
[team] => Twente Buzzards Heren 3
[positie] => 9
)
)
[nummer] => OHS2C
[version] => 1.0
[aantal_teams] => 11
[id] => 373
[seizoen] => 2014-2015
[naam] => Oost Afdeling Heren Senioren 2e klasse C
[gewijzigd] => 2014-10-05 18:34:25
)
So now you know you are dealing with an OBJECT and not scalar values or an array.
So try this code:-
<?php
$json=file_get_contents("http://west.basketball.nl/db/json/stand.pl?szn_Naam=2014-2015&cmp_ID=373");
$data = json_decode($json);
if (count($data->stand)) {
// Open the table
echo "<table>";
// Cycle through the array
foreach ($data->stand as $idx => $stand) {
// Output a row
echo "<tr>";
echo "<td>$stand->afko</td>";
echo "<td>$stand->positie</td>";
echo "</tr>";
}
// Close the table
echo "</table>";
}
?>
Why not try :
$data = json_decode($json, true);