Foreach in array om nogmaals te sorteren?
In mijn php script haal ik de waarden op via een foreach en hier maak ik dan een variabele van welke alle tekst bevat en je krijgt dan bv: 10 januari - tekst, 11 januari - tekst, 22 januari - tekst.
Deze foreach sorteert alleen aan de hand hoe mysql de data inlaadt en aangezien ik in mijn mysql de waarde van third monday of january niet kan ophalen maar dat doe in php krijg je dus dat die waardes bovenaan staan ook al is het bv. 22 januari. Dan begin je niet met 1 januari maar met 22 januari.
Is het mogelijk om in de foreach alle data vanuit mysql in te laten en dit in een variabele te gieten om vervolgens deze data nogmaals met bv. een foreach opnieuw te sorteren? (maar dan wel zo sorteren dat 1 januari als eerste komt en dan 2 januari en daarna 3 januari en niet 1 januari, 11 januari, 12 januari enz).
Waarom zet je het niet om naar DATETIME formaat? Nu ben je bezig met plakband-constructies te maken.
Jouw kennis over databases in het algemeen en over MySQL schiet op dit moment te kort.
Het eerste dat moet worden opgelost is dat je de datums efficiënter bewaart, zodat je er ook echt iets mee kunt gaan doen:
1. Maak in de tabel een tweede kolom van het type datetime.
2. Zet de gegevens van de vrije tekstkolom eenmalig om naar duidelijke datums, bijvoorbeeld met behulp van strtotime().
3. Controleer de gegevens en zet alles wat niet automatisch overgezet kan worden handmatig om naar datumtijd-notatie.
4. Waar het niet kan of te veel werk is: wis die gegevens, je kunt er toch niets mee.
5. Voorkom in je programma dat het weer kan gebeuren dat mensen onzin invullen, bijvoorbeeld door gebruik te maken van <input type="date">. Krijg je een gratis date picker cadeau. Controleer nog wel in PHP of de browser ook echt een datum opstuurt.
Wanneer alle gegevens in een datumtijdkolom zijn bewaard, kan je makkelijk sorteren in de database door via de SQL een ORDER BY statement toe toe voegen aan je SELECT statement. Zie ook: https://www.w3schools.com/mysql
Dat gaat heel efficiënt en je hoeft in PHP alleen de reeds gesorteerde gegevens op te halen. PHP is dan niet meer dan een doorgeefluik tussen de browser en een database.
Maar hoe kan ik een datum naar een datetime omzetten als deze jaarlijks anders is? Neem bv. burendag als voorbeeld. Dit is altijd op de vierde zaterdag in september, dat is dit jaar op 28 september maar vorig jaar was het op 23 september. Moet ik dan voor dit soort dagen in mijn database afzonderlijke regels maken met de specifieke datum erin en daar een datetime voor maken? Of kan ik ook een datetime waarde maken van de data "vierde zaterdag van september"?
Gewijzigd op 06/02/2024 20:59:03 door - Ariën -
php heeft de mogelijkheid om dat om te zetten middels:
Code (php)
Dit draai je dan in het begin van het jaar.
(je tekst zal wel in het Engels moeten zijn denk ik.)
Van Sebas op 06/02/2024 20:42:48:
Maar hoe kan ik een datum naar een datetime omzetten als deze jaarlijks anders is? Neem bv. burendag als voorbeeld. Dit is altijd op de vierde zaterdag in september, dat is dit jaar op 28 september maar vorig jaar was het op 23 september. Moet ik dan voor dit soort dagen in mijn database afzonderlijke regels maken met de specifieke datum erin en daar een datetime voor maken? Of kan ik ook een datetime waarde maken van de data "vierde zaterdag van september"?
Volgens mij begrijp je nog niet goed wat een datum is. Begrippen als burendag, dierendag, Prinsjesdag, Pasen, Ramadan, etc. etc. zijn geen datums. Het zijn afspraken. Als jij het hebt over burendag zonder daarbij een jaartal te noemen, is er niet eens een datum aan te verbinden.
Je kunt het ook omkeren, datums associëren met de afspraken die gelden. Maar als je mensen vraagt om een datum in te vullen, kunnen ze geen afspraken invullen. Tenzij je daar iets aparts voor maakt. Je zou een tabel kunnen vullen met datums en afspraken. Dan kan je die gebruiken in de interface om toch datums te krijgen. Er zijn algoritmes voor om afspraken te berekenen, zoals met Pasen. Daar waar dat niet kan, zoals met de Ramadan, zul je de afspraken handmatig moeten invoeren.
Het is zoals met tijdzones. Als er politiek afwijkende afspraken worden gemaakt, zoals dat we winter- en zomertijd hebben in bepaalde periodes, moeten we dag ook apart vastleggen in een tabel. Onder water rekenen programma's gewoon door met UNIX-timestamps. (Over Windows hebben we het gemakshalve maar niet.) Met tijdzones rekening houden is veel te complex.
Edit:
Dit doen we dus niet.
Gewijzigd op 07/05/2024 08:43:48 door - Ariën -