Uitlezen XML en groepperen resultaten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bert Bre

Bert Bre

08/06/2012 09:44:32
Quote Anchor link
Dag,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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";
}

?>


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
 
PHP hulp

PHP hulp

22/12/2024 21:24:54
 
Erwin H

Erwin H

08/06/2012 09:56:26
Quote Anchor link
Ik weet niet of ik helemaal je vraag begrijp, maar zo te zien zou ik in een variabele onthouden of het de eerste van de dag is of de tweede. Afhankelijk daarvan geef je output.

In pseudocode:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$dienstGelezen = false;
loop door alle diensten{
  if ( $dienstGelezen == false ){
    schrijf de regel, plus ochtenddienst naar het scherm
    $dienstGelezen = true
  } else {
    schrijf de middagdienst, plus linebreak naar het scherm
    $dienstGelezen = false
  }
}
 
- Mark -

- Mark -

08/06/2012 10:47:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>
 
Bert Bre

Bert Bre

08/06/2012 23:11:02
Quote Anchor link
Gast, heb jij dit nu echt voor mij zitten uitprogrammeren?
Of heb je dit eerder voor iets gedaan?

However, ik ben je zeer content.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.