<!--
/*
* Exempelkod skriven av Mikael Carlsson för att parsa JSON från API levererad av Sveriges Radio
* Jag skrev denna kod till geekjoan på Elektronikforumet och insåg att den fungerar så bra att
* jag kommer att använda den i min egen miljö här hemma för att se trafiken innan jag kör till jobb
* Licens: public domain
* Version 0.1 - första release
* Version 0.2 - gjorde om till html
* version 0.3 - fler orter
* Version 0.4 - hack med html :-)
*/
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Din titel här</title>
<style>
td{font-family: verdana; font-size: 12px; color: #FFFFFF}
</style>
</head>
<body bcolor="#FFFFFF" leftmargin="1" topmargin="1">
<table border="0" cellspacing="1" cellpadding="1">
<?php
// Orter som ska kollas
$orter = array("uppland", "stockholm");
// Kategorierna och prioriteterna kommer från SR's hemsida:
// http://sverigesradio.se/api/documentation/v2/metoder/trafik.html
$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
// Hämta trafikinformation från Sveriges Radio API-sida
$antal_orter = count($orter);
for ($o = 0; $o < $antal_orter; $o++)
{
$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&trafficareaname=' . $orter[$o]);
// Dekoda det som en array
$trafik = json_decode($json,true);
// Ta bort denna remark för att dumpa ut det i råformat, hjälper vid debug
//var_dump($trafik);
// Antal meddelanden
$antal_meddelanden = count($trafik["messages"]);
// Rubrikerna i tabellen
echo '<tr bgcolor="#444444">';
echo '<td>' . $antal_meddelanden . " " . $orter[$o] . '</td>';
echo '<td>Titel</td>';
echo '<td>Beskrivning</td>';
echo '<td>Sub</td>';
echo '<td>Kategori</td>';
echo '<td>Prioritet</td>';
echo '</tr>';
// Loopa igenom alla meddelanden
for ($i =0; $i < $antal_meddelanden; $i++)
{
echo '<tr bgcolor="#222222">';
// Bearbeta datumsträngen för att rätta till formatet, därav preg_match
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
// Skriv ut datum och tid i RFC 2822 format, ändra enligt php date() för att få annat format
echo '<td style="width: 90px" valign="top">' . date( "d M H:i", $tiden[1] ) . '</td>';
// Skriv ut titeln
echo '<td style="width: 300px" valign="top">' . $trafik["messages"][$i]["title"] . '</td>';
// Skriv ut trafikstörningen
echo '<td style="width: 700px" valign="top">' . $trafik["messages"][$i]["description"] . '</td>';
// Här kommer vad som orsakar störningen
echo '<td style="width: 90px" valign="top">' . $trafik["messages"][$i]["subcategory"] . '</td>';
// Skriv ut vilken kategori det är (i klartext)
echo '<td style="width: 90px" valign="top">' . $kategorier[$trafik["messages"][$i]["category"]] . '</td>';
// Prioritet
echo '<td style="width: 90px" valign="top">' . $kategorier[$trafik["messages"][$i]["ptiority"]] . '</td>';
echo '</tr>';
} // for $antal_meddelanden
} // for antal_orter
echo '</html>';
?>
Enklaste när man leker med blandning som denna är göra det först i html hur skulle den se ut och sen lägga i php kod där det behövs, så om det är tabellen i frågan då inuti själva <table>taggen men efter <tr> med kolumn namn, osv.
Då brukar man lösa det ganska fort och sen rätt indent hjälper också att hitta felet.