Uitlezen XML en groepperen resultaten
momenteel lees ik met SimpleXML een xml bestand in.
Dit is een lijst met opnames van kerkdiensten.
Bijna elke zondag zijn er 2 diensten. (ochtend / middag)
Nu staat elke opname als losse entry in de XML feed, welke ik nu zodanig in een lijstje heb staan.
Dit betekend dat voor één dag steeds 2 entry's staan. Kijk naar op: http://i.klikbert.nl/pk/
Graag zou ik één regel willen hebben, met daar achter een link naar de ochtend én middagdienst.
Ik lees de XML file uit met een foreach-lus:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$dienst_lijst = simplexml_load_file("http://kerkdienstgemist.nl/playlists/1328.rss?limit=20");
foreach($dienst_lijst->channel->item as $dienst) {
echo "<a href=\"".$dienst->guid."\">";
echo date("d F Y",strtotime($dienst->pubDate))." - ";
if ((int)date("H",strtotime($dienst->pubDate)) < 12) echo "Ochtenddienst";
elseif ((int)date("H",strtotime($dienst->pubDate)) > 18) echo "Avonddienst";
else echo "Middagdienst";
echo "</a> ";
echo "<br />\n";
}
?>
$dienst_lijst = simplexml_load_file("http://kerkdienstgemist.nl/playlists/1328.rss?limit=20");
foreach($dienst_lijst->channel->item as $dienst) {
echo "<a href=\"".$dienst->guid."\">";
echo date("d F Y",strtotime($dienst->pubDate))." - ";
if ((int)date("H",strtotime($dienst->pubDate)) < 12) echo "Ochtenddienst";
elseif ((int)date("H",strtotime($dienst->pubDate)) > 18) echo "Avonddienst";
else echo "Middagdienst";
echo "</a> ";
echo "<br />\n";
}
?>
Hoe kan ik dit het beste doen? Heb al lopen kloten net next() en prev() maar dat lijkt niet te werken.
Zou ik in het ergste geval misschien een nieuwe array moeten samenstellen met de resultaten?
Ik hoop dat het makkelijker kan.
Bedankt vast!
Gewijzigd op 08/06/2012 09:47:49 door Bert Bre
In pseudocode:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Debugging.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
0 = Aan
1 = Uit
LET OP! Debugging altijd uitzetten op een website die live is. Hackers vinden dit soort informatie maar al te leuk.
*/
ini_set('display_errors', 1);
error_reporting(E_ALL);
/*--------------------------------------------------------------------------------------------------------------------------
(§) Function :: string part_of_the_day( int $hour )
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Geeft terug in welk gedeelte van de dag we zitten aan de hand van het opgegeven uur.
*/
function part_of_the_day($hour){
switch($hour){
case $hour > 18:
return 'Avonddienst';
break;
case $hour < 12:
return 'Ochtenddienst';
break;
default:
return 'Middagdienst';
}
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) De gemiste kerk diensten ophalen.
--------------------------------------------------------------------------------------------------------------------------*/
$service_list = simplexml_load_file("http://kerkdienstgemist.nl/playlists/1328.rss?limit=20");
/*--------------------------------------------------------------------------------------------------------------------------
(§) Gegevens per datum groeperen.
--------------------------------------------------------------------------------------------------------------------------*/
# Set array $dates voor het opslaan van de gegevens per datum.
$dates = array();
# All diensten aflopen.
foreach($service_list->channel->item as $service){
# De publicatie datum bepalen.
$publication_date = date("d F Y",strtotime($service->pubDate));
# Het uur van de publicatie bepalen.
$publication_hour = date("G",strtotime($service->pubDate));
# Alles samenvoegen en de mp3 link eraan toevoegen.
$dates[$publication_date][$publication_hour] = $service->guid;
}
?>
<html>
<head>
<title>Demo :: Uitzending Gemist</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) De gehele handel weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Lijst openen.
echo '<ul>';
# Alle datums aflopen.
foreach($dates as $date => $services){
# Set $temp voor het tijdelijk opslaan van alle diensten van de huidige dag.
$temp = array();
# Alle diensten van de huidige dag aflopen.
foreach($services as $hour => $mp3_link){
$temp[] = '<a href="'.$mp3_link.'">'.part_of_the_day($hour).'</a>';
}
# De dag plus alle diensten weergeven.
echo '<li>'.$date.' - '.implode(' / ', $temp).'</li>';
}
# Lijst sluiten.
echo '</ul>';
?>
</body>
</html>
/*--------------------------------------------------------------------------------------------------------------------------
(§) Debugging.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
0 = Aan
1 = Uit
LET OP! Debugging altijd uitzetten op een website die live is. Hackers vinden dit soort informatie maar al te leuk.
*/
ini_set('display_errors', 1);
error_reporting(E_ALL);
/*--------------------------------------------------------------------------------------------------------------------------
(§) Function :: string part_of_the_day( int $hour )
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Geeft terug in welk gedeelte van de dag we zitten aan de hand van het opgegeven uur.
*/
function part_of_the_day($hour){
switch($hour){
case $hour > 18:
return 'Avonddienst';
break;
case $hour < 12:
return 'Ochtenddienst';
break;
default:
return 'Middagdienst';
}
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) De gemiste kerk diensten ophalen.
--------------------------------------------------------------------------------------------------------------------------*/
$service_list = simplexml_load_file("http://kerkdienstgemist.nl/playlists/1328.rss?limit=20");
/*--------------------------------------------------------------------------------------------------------------------------
(§) Gegevens per datum groeperen.
--------------------------------------------------------------------------------------------------------------------------*/
# Set array $dates voor het opslaan van de gegevens per datum.
$dates = array();
# All diensten aflopen.
foreach($service_list->channel->item as $service){
# De publicatie datum bepalen.
$publication_date = date("d F Y",strtotime($service->pubDate));
# Het uur van de publicatie bepalen.
$publication_hour = date("G",strtotime($service->pubDate));
# Alles samenvoegen en de mp3 link eraan toevoegen.
$dates[$publication_date][$publication_hour] = $service->guid;
}
?>
<html>
<head>
<title>Demo :: Uitzending Gemist</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) De gehele handel weergeven.
--------------------------------------------------------------------------------------------------------------------------*/
# Lijst openen.
echo '<ul>';
# Alle datums aflopen.
foreach($dates as $date => $services){
# Set $temp voor het tijdelijk opslaan van alle diensten van de huidige dag.
$temp = array();
# Alle diensten van de huidige dag aflopen.
foreach($services as $hour => $mp3_link){
$temp[] = '<a href="'.$mp3_link.'">'.part_of_the_day($hour).'</a>';
}
# De dag plus alle diensten weergeven.
echo '<li>'.$date.' - '.implode(' / ', $temp).'</li>';
}
# Lijst sluiten.
echo '</ul>';
?>
</body>
</html>
Of heb je dit eerder voor iets gedaan?
However, ik ben je zeer content.