Autor | Zpráva | ||
---|---|---|---|
havran99 Profil |
#1 · Zasláno: 2. 10. 2014, 08:32:44
Zdravim mam xml parser ktory mi bezi v pohode ale potreboval by som vytiahnut od aktualneho casu program a dajme tomu len 3 riadky. Skusal som no neprisiel som na to ako. Budem rad ak mi niekto pomoze.
<?xml version="1.0" encoding="UTF-8"?> <tv> <channel id="JOJ"> <display-name lang="cs">JOJ</display-name> </channel> <programme start="20141002052000 +0200" stop="20141002060000 +0200" channel="JOJ"> <title lang="cs">Velké zprávy TV JOJ (?)</title> </programme> <programme start="20141002060000 +0200" stop="20141002080000 +0200" channel="JOJ"> <title lang="cs">Dobré ráno (?)</title> <desc lang="cs">Dobré ráno, lepší ráno!(živě)<br /></desc> </programme> <programme start="20141002080000 +0200" stop="20141002090500 +0200" channel="JOJ"> <title lang="cs">Soudní síň (?)</title> <desc lang="cs">Nechceš si mě vzít<br /> Soudní případy ze Slovenska plné emocí, které jsou inspirovány skutečností (2013). Hrají: J. Penc a další. Režie B. Mišík(r)</desc> </programme> <programme start="20141002090500 +0200" stop="20141002095500 +0200" channel="JOJ"> <title lang="cs">Soudní síň (?)</title> <desc lang="cs">Paroháč<br /> Soudní případy ze Slovenska plné emocí, které jsou inspirovány skutečností (2014)(r)</desc> </programme> <programme start="20141002095500 +0200" stop="20141002110000 +0200" channel="JOJ"> <title lang="cs">Panelák XIV (22) (?)</title> <desc lang="cs">Filip strávil noc u Márii. Julka se rozhodla, že bude běhat s Goranem a Ivanou. Zabrání jí v tom? Lacko žádá Janku o radu(r)</desc> </programme> </tv> <?php $xml = simplexml_load_file('http://192.168.3.100/guide.xml'); echo "<table>\n"; foreach($xml->programme as $match){ echo "<tr><td>"; $cas = (string)$match['start']; $hodina = substr($cas, 8, 2); $minuta = substr($cas, 10, 2); $zaciatok_hodiny = (string)($hodina.":".$minuta); echo "</td><td>"; $cas = (string)$match['stop']; $hodina = substr($cas, 8, 2); $minuta = substr($cas, 10, 2); $koniec_hodiny = (string)($hodina.":".$minuta); $koniec_cas = (string)($zaciatok_hodiny." - ".$koniec_hodiny); echo $koniec_cas; echo "</td><td>"; $titul = $match->title; $titulok = str_replace("(?)","",$titul); echo $titulok; echo "</td></tr>\n"; } echo "</table>\n"; ?> |
||
Tori Profil |
#2 · Zasláno: 2. 10. 2014, 09:02:44
Přidejte si před cyklus proměnnou $ted s aktuálním časem (instance DateTime). Když pak tyhle řádky:
$cas = (string)$match['start']; $hodina = substr($cas, 8, 2); $minuta = substr($cas, 10, 2); $zaciatok_hodiny = (string)($hodina.":".$minuta); $start = new DateTime((string)$match['start']); $zaciatok_hodiny = $start->format('H:i'); if ($start > $ted) { .. program právě probíhá }
|
||
juriad Profil |
Já bych to řešil trošku jinak, tak aby nezávislo na pořadí programů v tom xml souboru.
V poli si budu udržovat nejvýše N nejmenších hodnot a pak si jena konci můžu třeba vypsat do tabulky. # enlists the $val if it is one of the forst $n values according to the $cmp function # drops the superfluous values function bestN(array &$arr, $n, $cmp, $val) { for ($i = 0; $i < count($arr); $i++) { $c = call_user_func($cmp, $val, $arr[i]); if ($c < 0) { array_splice($arr, $i, 0, $val); if (count($arr) > $n) { array_pop($arr); } return; } } if (count($arr) < $n) { $arr[] = $val; } } # compares two programmes based on their ending times function programmeCmp($p1, $p2) { $e1 = DateTime::createFromFormat('YmdHis O', $p1['stop']); $e2 = DateTime::createFromFormat('YmdHis O', $p2['stop']); if ($e1 < $e2) { return -1; } else if ($e1 > $e2) { return 1; } else { return 0; } } $xml = simplexml_load_file('./guide.xml'); $programmes = array(); # this will contain at most 3 nearest programmes $current = new DateTime('yesterday'); # set this to 'now' foreach($xml->programme as $match) { $end = DateTime::createFromFormat('YmdHis O', $match['stop']); # if the programme hasn't finished yet if ($end > $current) { # try to add it into the list bestN($programmes, 3, 'programmeCmp', $match); } } # prints three programmes in the nearest future var_dump($programmes); |
||
havran99 Profil |
#4 · Zasláno: 2. 10. 2014, 10:03:04
juriad: funguje to akurat som musel zmenit yesterday na now a uz to vypisuje od aktualneho casu ale vypis mam takto:
array(3) { [0]=> object(SimpleXMLElement)#7 (3) { ["@attributes"]=> array(3) { ["start"]=> string(20) "20141002095500 +0200" ["stop"]=> string(20) "20141002110000 +0200" ["channel"]=> string(3) "JOJ" } ["title"]=> string(21) "Panelák XIV (22) (?)" ["desc"]=> string(134) "Filip strávil noc u Márii. Julka se rozhodla, že bude běhat s Goranem a Ivanou. Zabrání jí v tom? Lacko žádá Janku o radu(r)" } [1]=> object(SimpleXMLElement)#6 (3) { ["@attributes"]=> array(3) { ["start"]=> string(20) "20141002110000 +0200" ["stop"]=> string(20) "20141002120000 +0200" ["channel"]=> string(3) "JOJ" } ["title"]=> string(38) "Nejkrásnější bydlení III (13) (?)" ["desc"]=> string(155) "Kanadská reality show (2010-2011). Moderují: J. Silver Scott, D. Scott, A. Barrettová. Režie S. Cluer, S. Obljubeková, B. Quigley, Ch. Zalamedaová(r)" } [2]=> object(SimpleXMLElement)#5 (2) { ["@attributes"]=> array(3) { ["start"]=> string(20) "20141002120000 +0200" ["stop"]=> string(20) "20141002130000 +0200" ["channel"]=> string(3) "JOJ" } ["title"]=> string(20) "Zprávy ve 12:00 (?)" } } |
||
juriad Profil |
havran99:
To yesterday jsem použil záměrně, protože v ukázce toho xml byly všechny časy už v minulosti. Ta moje ukázka je vlastně jen preprocessing; $programmes je pole xml elementů.
Stačí tedy následně použít tvůj původní kód (řádky 3 až 23) s tím, že změníš foreach na: foreach($programmes as $match){ |
||
havran99 Profil |
#6 · Zasláno: 2. 10. 2014, 10:09:24
jasneee pochopil som, vdaka.
|
||
Časová prodleva: 9 let
|
0