| 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: 11 let
|
|||
0