PHP: sorteren op datum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Beste mensen,

Ik gebruik het volgende script om automatisch een playlist te genereren.


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
<?php

/*
This is a sample file that reads through a directory, filters the mp3/jpg/flv 
files and builds a playlist from it. After looking through this file, you'll 
probably 'get the idea' and'll be able to setup your own directory.
*/


// search for mp3 files. set this to '.flv' or '.jpg' for the other scripts 
$filter = ".jpg";
// path to the directory you want to scan
$directory = "./";
$url = 'layout/images/agenda/front';


// read through the directory and filter files to an array
@$d = dir($directory);
if ($d) { 
while($entry=$d->read()) { 
$ps = strpos(strtolower($entry), $filter);
if (!($ps === false)) { 
$items[] = $entry; 
} 
}
$d->close();
sort($items);
}


// third, the playlist is built in an xspf format
// we'll first add an xml header and the opening tags .. 
header("content-type:text/xml;charset=utf-8");

echo "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
echo " <trackList>\n";

// .. then we loop through the mysql array ..
for($i=0; $i<sizeof($items); $i++) {
echo " <track>\n";
echo " <title>".$items[$i]."</title>\n";
echo " <location>" . $url . '/' . $items[$i] . "</location>\n";
echo " <info>javascript:navigate('agenda.php','columns')</info>"; 
echo " </track>\n";
}

// .. and last we add the closing tags
echo " </trackList>\n";
echo "</playlist>\n";


/*
That's it! You can feed this playlist to the SWF by setting this as it's 'file' 
parameter in your HTML page.
*/

?>


Alle afbeeldingen de directory komen op de playlist, dat gaat allemaal prima, alleen nu wil ik het volgende: In de directory moet worden gezocht naar afbeeldingen met een voorvoegsel van de huidige maand en het huidge jaartal, in het geval van deze maand (april) bv. 17-04-2008_bestandnaam.jpg of 28-04-2008_bestandnaam.jpg en deze dienen vervolgens opvolgend aan de playlist te worden toegevoegd.

Als er geen bestand aanwezig is dat hieraan voldoet dan moet er één vervangend bestand in de playlist worden weergegeven, bv. geenitems.jpg

Volgens mij is dit vrij simpel te doen met de date-functie van PHP. Ik heb het tot nu toe alleen nog niet werkend gekregen. Is er iemand bereid om me hiermee verder te helpen? Mochten er nog onduidelijkheden zijn dan hoor ik het graag! Alvast bedankt! :)

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou het volgende kunnen doen:
1. Substring loslaten op je bestandsnaam om een geldige date string te verkrijgen.
2. De waarde van het bovenstaande invoeren in strtotime() waarna je een unix timestamp terug krijgt.
3. De Unixtimestamp zijn secondes, hoe hoeger het getal hoe later het eropgezet is. Als je het in een array knalt kun je gewoon array_sort of sort() gebruiken ofzo.

Hoop dat je hier wat aan hebt.

Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Ik heb helaas te weinig verstand van zaken om je tips direct te kunnen implementeren, maar je oplossing klinkt aannemelijk. De stappen die het script moet nemen zijn eigenlijk heel simpel:

1. Kijken wat de huidige maand en jaartal is. (kan volgens mij met 'date')
2. Kijken of er afbeeldingen zijn met een voorvoegsel overeenkomend met de maand en het jaartal
3. En als dit niet het geval is, een andere (voorgedefinieerde) afbeelding weergeven.

Acties:
  • 0 Henk 'm!

  • cverkooyen
  • Registratie: Juli 2002
  • Laatst online: 17:37
Kan je niet alle items in een array stoppen en deze dan sorteren?

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Deze gaat over de schutting naar Programming

Maar het is wel de bedoeling dat je het zelf gaat proberen, wij gaan niet andermans script voor je fixen ;)

Acties:
  • 0 Henk 'm!

  • Chesta
  • Registratie: November 2004
  • Laatst online: 27-08 06:55
Als ik bestanden of mappen maak met een datum in de bestandsnaam, dan draai ik de datum altijd om (JJJJ-MM-DD). Op die manier werkt sorteren wel automatisch :)

End of Transmission


Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Ik neem aan dat dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
// read through the directory and filter files to an array 
@$d = dir($directory); 
if ($d) {  
while($entry=$d->read()) {  
$ps = strpos(strtolower($entry), $filter); 
if (!($ps === false)) {  
$items[] = $entry;  
}  
} 
$d->close(); 
sort($items); 
}


het cruciale stukje code is voor de 'selectieprocedure', correct?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Daar wordt een directory uitgelezen en bepaalde filenames worden in een array gestopt.

Maar dat staat letterlijk in de comment. :P Je kan beter een PHP tutorial erbij halen, want het is hier geen afhaalbalie. Zelfs al wordt de oplossing voorgekauwd (10s werk :P ), betekent dat nog dat je met de eerste de beste aanpassing weer bij de afhaalbalie langs wil gaan... :>

{signature}


Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Voutloos schreef op donderdag 17 april 2008 @ 12:57:
Daar wordt een directory uitgelezen en bepaalde filenames worden in een array gestopt.

Maar dat staat letterlijk in de comment. :P Je kan beter een PHP tutorial erbij halen, want het is hier geen afhaalbalie. Zelfs al wordt de oplossing voorgekauwd (10s werk :P ), betekent dat nog dat je met de eerste de beste aanpassing weer bij de afhaalbalie langs wil gaan... :>
Ik kom hier ook niet voor de afhaalbalie, maar voor de informatiebalie... ;)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Die informatie is al gegeven in de allereerste reactie en de informatie over het stukje code stond al in de code zelf als commentaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Heb het inmiddels vrij simpel op weten te lossen op de volgende manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// selectie op datum
$datum = date("Y-m"); 


// read through the directory and filter files to an array
@$d = dir($directory);
if ($d) { 
while($entry=$d->read()) { 
$ps = strpos(strtolower($entry), $datum, $filter);
if (!($ps === false)) { 
$items[] = $entry; 
} 
}
$d->close();
sort($items);
}


Bestanden zijn als volgt genaamd: 2008-04-28_naam.jpg etc. Wat ik nu eigenlijk wil proberen is niet de bestanden van de huidige maand weer te geven, maar de bestanden die binnen een tijdsperiode van 30 dagen vanaf het huidige tijdstip vallen. $datum zou dus eigenlijk een soort van reeks moeten zijn van 30 data die allemaal toegelaten worden. Is hier een makkelijke manier voor of wordt dit erg veel rekenwerk?

Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

MG-studios schreef op zondag 20 april 2008 @ 21:04:
Heb het inmiddels vrij simpel op weten te lossen op de volgende manier:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// selectie op datum
$datum = date("Y-m"); 


// read through the directory and filter files to an array
@$d = dir($directory);
if ($d) { 
while($entry=$d->read()) { 
$ps = strpos(strtolower($entry), $datum, $filter);
if (!($ps === false)) { 
$items[] = $entry; 
} 
}
$d->close();
sort($items);
}


Bestanden zijn als volgt genaamd: 2008-04-28_naam.jpg etc. Wat ik nu eigenlijk wil proberen is niet de bestanden van de huidige maand weer te geven, maar de bestanden die binnen een tijdsperiode van 30 dagen vanaf het huidige tijdstip vallen. $datum zou dus eigenlijk een soort van reeks moeten zijn van 30 data die allemaal toegelaten worden. Is hier een makkelijke manier voor of wordt dit erg veel rekenwerk?
Op PHP.net staan tig van zulke voorbeelden, en eigenlijk kun je het al met het eerste antwoord. Misschien kun je beter even iemand inhuren voor een paar tientjes om dit uit te programmeren.

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
kingmuze schreef op zondag 20 april 2008 @ 21:11:
Op PHP.net staan tig van zulke voorbeelden...
Thanks! :) Ga ik daar nog even verder zoeken.

Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
Het is me gelukt om de gewenste lijst met data (30 dagen vanaf nu) te genereren. Het enige probleem waar ik nu nog mee zit is dit te implementeren in de bovenstaande code. In welke richting moet ik zoeken?

PHP:
1
2
3
4
For($iDay = 0; $iDay <= Date('t'); $iDay++)
{
echo Date('Y-m-d', Time() + ($iDay * 86400)).'<br>';
}

Acties:
  • 0 Henk 'm!

  • MG-studios
  • Registratie: Juni 2007
  • Laatst online: 15-09 21:02
EDIT: Ok! Het probleem is uiteindelijk op de onderstaande manier opgelost. Problem solved! :)

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
<?php
// PLAYLIST VOOR ALLE ITEMS VAN DE KOMENDE 30 DAGEN
$iTime = strtotime('+30 days');
$sFolder = 'layout/images/agenda/front/';
$aFiles = array();

foreach(glob('*') as $sPad)
{
    $sFile = basename($sPad);
    
    // Controle of bestand met een datum begint
    if(preg_match('_^[0-9]{4}-[0-9]{2}-[0-9]{2}_', $sFile))
    {
        // Datum achterhalen
        $sDate = substr($sFile, 0, 10);
        
        // Controleren of datum < 30 dagen en groter of gelijk aan vandaag is
        if(strtotime($sDate) <= $iTime && strtotime($sDate) >= strtotime('today') )
        {
            $aFiles[] = $sFile;
        }
    }
    
}

header("content-type:text/xml;charset=utf-8");

echo "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
echo " <trackList>\n";

foreach($aFiles as $image) {
echo " <track>\n";
echo " <title>".$image."</title>\n";
echo " <location>" . $sFolder . '' . $image . "</location>\n";
echo " <info>agenda.php</info>"; 
echo " </track>\n";
}
if (empty($image)) {
echo " <track>\n";
echo " <title>Geen items</title>\n";
echo " <location>" . $sFolder . "geenitems.jpg</location>\n";
echo " <info>agenda.php</info>"; 
echo " </track>\n";
}

echo " </trackList>\n";
echo "</playlist>\n";
?> 

[ Voor 15% gewijzigd door MG-studios op 04-05-2008 11:33 ]

Pagina: 1