Un tableau des jours, tout comme il faut.

Un tableau des jours, tout comme il faut.

Bonjour Monsieur j’aurais besoin d’une fonction qui me retourne un tableau $days contenant les jours de la semaine s’il vous plait.

Mais bien entendu Monsieur, voici :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24days%20%3D%20%5B%20’Sunday’%2C%20’Monday’%2C%20’Tuesday’%2C%20’Wednesday’%2C%20’Thursday’%2C%20’Friday’%2C%20’Saturday’%20%5D%3B%0A%20%20%20%20return%20%24days%3B%0A%7D%0A%2F*%0Aarray(7)%20%7B%0A%5B0%5D%3D%26gt%3B%0Astring(6)%20%22Sunday%22%0A%5B1%5D%3D%26gt%3B%0Astring(6)%20%22Monday%22%0A%5B2%5D%3D%26gt%3B%0Astring(7)%20%22Tuesday%22%0A%5B3%5D%3D%26gt%3B%0Astring(9)%20%22Wednesday%22%0A%5B4%5D%3D%26gt%3B%0Astring(8)%20%22Thursday%22%0A%5B5%5D%3D%26gt%3B%0Astring(6)%20%22Friday%22%0A%5B6%5D%3D%26gt%3B%0Astring(8)%20%22Saturday%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Alors oui, mais c’est pour un plugin donc ça doit être traduisible. Mon interface est en français.

Pas de soucis :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24days%20%3D%20%5B%20__(%20’Sunday’%20)%2C%20__(%20’Monday’%20)%2C%20__(%20’Tuesday’%20)%2C%20__(%20’Wednesday’%20)%2C%20__(%20’Thursday’%20)%2C%20__(%20’Friday’%20)%2C%20__(%20’Saturday’%20)%20%5D%3B%0A%20%20%20%20return%20%24days%3B%0A%7D%0A%2F*array(7)%20%7B%0A%5B0%5D%3D%3E%0Astring(6)%20%22dimanche%22%0A%5B1%5D%3D%3E%0Astring(6)%20%22lundi%22%0A%5B2%5D%3D%3E%0Astring(7)%20%22mardi%22%0A%5B3%5D%3D%3E%0Astring(9)%20%22mercredi%22%0A%5B4%5D%3D%3E%0Astring(8)%20%22jeudi%22%0A%5B5%5D%3D%3E%0Astring(6)%20%22vendredi%22%0A%5B6%5D%3D%3E%0Astring(8)%20%22samedi%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Ha oui c’est tout de suite mieux, mais j’ai dit, je suis français et donc ma semaine commence par un lundi (et j’utilise les degrès Celcius et le système métrique, oui ça ne sert pas dans l’équation mais j’avais envie de le rappeler).

En même temps, remettez-moi les premières lettres en majuscule sur les jours, on les a perdues !

Ok, alors comme ceci :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24days%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%20%24i%20%3D%200%3B%20%24i%20%3C%207%3B%20%24i%2B%2B%20)%20%7B%0A%20%20%20%20%20%20%20%20%24days%5B%5D%20%3D%20date_i18n(%20’l’%2C%20strtotime(%20%24i%20-%20date(%20’w’%2C%200%20)%20.%20’%20day’%2C%200%20)%20)%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(%20’Monday’%20%3D%3D%3D%20_x(%20’Monday’%2C%20’First%20day%20of%20week%2C%20do%20not%20translate’%2C%20’2112’%20)%20)%20%7B%0A%20%20%20%20%20%20%20%20%24sunday%20%3D%20array_shift(%20%24days%20)%3B%0A%20%20%20%20%20%20%20%20%24days%20%20%20%3D%20array_map(%20’ucfirst’%2C%20array_merge(%20%24days%2C%20%5B%20%24sunday%20%5D%20)%20)%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%24days%3B%0A%7D%0A%2F*array(7)%20%7B%0A%5B0%5D%3D%3E%0Astring(6)%20%22lundi%22%0A%5B1%5D%3D%3E%0Astring(7)%20%22mardi%22%0A%5B2%5D%3D%3E%0Astring(9)%20%22mercredi%22%0A%5B3%5D%3D%3E%0Astring(8)%20%22jeudi%22%0A%5B4%5D%3D%3E%0Astring(6)%20%22vendredi%22%0A%5B5%5D%3D%3E%0Astring(8)%20%22samedi%22%0A%5B6%5D%3D%3E%0Astring(6)%20%22dimanche%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Bien vu le date_i18n() ! Par contre un peu tricky avec la méthode de trad, WordPress a déjà fait ça une fois dans le core, mais comme ça force de nouveau chaque langue à intervenir pour faire son choix du lundi ou pas, je préfère éviter.
En fait le premier jour de la semaine doit être celui choisi dans les réglages généraux de WordPress. J’ai mis « mercredi » pour tester.

Oui, alors comme ça :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24days%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%20%24i%20%3D%200%3B%20%24i%20%3C%207%3B%20%24i%2B%2B%20)%20%7B%0A%20%20%20%20%20%20%20%20%24days%5B%5D%20%3D%20date_i18n(%20’l’%2C%20strtotime(%20%24i%20-%20date(%20’w’%2C%200%20)%20.%20’%20day’%2C%200%20)%20)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%24start_of_week%20%3D%20(int)%20get_option(%20’start_of_week’%20)%3B%20%0A%20%20%20%20%24days_before%20%20%20%3D%20array_slice(%20%24days%2C%200%2C%20%24start_of_week%20)%3B%20%0A%20%20%20%20%24days_after%20%20%20%20%3D%20array_slice(%20%24days%2C%20%24start_of_week%2C%206%20)%3B%20%0A%20%20%20%20%24days%20%20%20%20%20%20%20%20%20%20%3D%20array_map(%20’ucfirst’%2C%20array_merge(%20%24days_after%2C%20%24days_before%20)%20)%3B%20%0A%20%20%20%20return%20%24days%3B%0A%7D%0A%2F*%0Aarray(7)%20%7B%0A%5B0%5D%3D%3E%0Astring(9)%20%22Mercredi%22%0A%5B1%5D%3D%3E%0Astring(8)%20%22Jeudi%22%0A%5B2%5D%3D%3E%0Astring(6)%20%22Vendredi%22%0A%5B3%5D%3D%3E%0Astring(8)%20%22Samedi%22%0A%5B4%5D%3D%3E%0Astring(6)%20%22Dimanche%22%0A%5B5%5D%3D%3E%0Astring(6)%20%22Lundi%22%0A%5B6%5D%3D%3E%0Astring(7)%20%22Mardi%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Pas mal le array_slice() pour découper/coller ! Mais je remarque une chose… Les clés associatives du tableau commencent toujours par 0 alors qu’elles doivent toujours rester les mêmes pour les jours, donc 0 pour le dimanche, 1 pour lundi etc. Même si le tableau commence par un autre jour.

D’accord, voici :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24days%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%20%24i%20%3D%200%3B%20%24i%20%3C%207%3B%20%24i%2B%2B%20)%20%7B%0A%20%20%20%20%20%20%20%20%24days%5B%5D%20%3D%20date_i18n(%20’l’%2C%20strtotime(%20%24i%20-%20date(%20’w’%2C%200%20)%20.%20’%20day’%2C%200%20)%20)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%24start_of_week%20%3D%20(int)%20get_option(%20’start_of_week’%20)%3B%20%0A%20%20%20%20%24days_before%20%3D%20array_slice(%20%24days%2C%200%2C%20%24start_of_week%20)%3B%20%0A%20%20%20%20%24days_after%20%3D%20array_slice(%20%24days%2C%20%24start_of_week%2C%206%20)%3B%20%0A%20%20%20%20%24days%20%3D%20array_map(%20’ucfirst’%2C%20array_merge(%20%24days_after%2C%20%24days_before%20)%20)%3B%20%0A%20%20%20%20%24keys%20%3D%20range(%200%2C%206%20)%3B%20%0A%20%20%20%20%24keys_before%20%3D%20array_slice(%20%24keys%2C%200%2C%20%24start_of_week%20)%3B%20%0A%20%20%20%20%24keys_after%20%3D%20array_slice(%20%24keys%2C%20%24start_of_week%2C%206%20)%3B%20%0A%20%20%20%20%24keys%20%3D%20array_merge(%20%24keys_after%2C%20%24keys_before%20)%3B%20%0A%20%20%20%20%24days%20%3D%20array_combine(%20%24keys%2C%20%24days%20)%3B%20%0A%20%20%20%20return%20%24days%3B%0A%7D%0A%2F*%0Aarray(7)%20%7B%0A%5B3%5D%3D%3E%0Astring(9)%20%22Mercredi%22%0A%5B4%5D%3D%3E%0Astring(8)%20%22Jeudi%22%0A%5B5%5D%3D%3E%0Astring(6)%20%22Vendredi%22%0A%5B6%5D%3D%3E%0Astring(8)%20%22Samedi%22%0A%5B0%5D%3D%3E%0Astring(6)%20%22Dimanche%22%0A%5B1%5D%3D%3E%0Astring(6)%20%22Lundi%22%0A%5B2%5D%3D%3E%0Astring(7)%20%22Mardi%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Merci, un dernier point pour le défi : pas de boucle for/foreach/while, juste des fonctions de tableaux et moins de lignes….

Ça devrait faire l’affaire :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24start_of_week%20%3D%20(int)%20get_option(%20’start_of_week’%20)%3B%0A%20%20%20%20return%20array_map(%20function()%20use%20(%20%24start_of_week%20)%20%7B%20static%20%24start_of_week%3B%20return%20ucfirst(%20date_i18n(%20’l’%2C%20strtotime(%20%24start_of_week%2B%2B%20-%20date(%20’w’%2C%200%20)%20.%20’%20day’%2C%200%20)%20)%20)%3B%20%7D%2C%20array_combine(%20array_merge(array_slice(%20range(%200%2C%206%20)%2C%20%24start_of_week%2C%207%20)%2C%20array_slice(%20range(%200%2C%206%20)%2C%200%2C%20%24start_of_week%20)%20)%2C%20range(%200%2C%206%20)%20)%20)%3B%0A%7D%0A%2F*%0Aarray(7)%20%7B%0A%5B3%5D%3D%3E%0Astring(9)%20%22Mercredi%22%0A%5B4%5D%3D%3E%0Astring(8)%20%22Jeudi%22%0A%5B5%5D%3D%3E%0Astring(6)%20%22Vendredi%22%0A%5B6%5D%3D%3E%0Astring(8)%20%22Samedi%22%0A%5B0%5D%3D%3E%0Astring(6)%20%22Dimanche%22%0A%5B1%5D%3D%3E%0Astring(6)%20%22Lundi%22%0A%5B2%5D%3D%3E%0Astring(7)%20%22Mardi%22%0A%7D%0A*%2F » message= » » highlight= » » provider= »manual »/]

Bingo, un array_map() sur une fonction anonyme, bon, une ligne c’est pas très « clever code », on dépile un peu quand même ?

Allez :

[pastacode lang= »php » manual= »function%20baw_get_days()%20%7B%0A%20%20%20%20%24start_of_week%20%3D%20(int)%20get_option(%20’start_of_week’%20)%3B%0A%20%20%20%20return%20array_map(%0A%20%20%20%20%20%20%20%20function()%20use%20(%20%24start_of_week%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20static%20%24start_of_week%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20ucfirst(%20date_i18n(%20’l’%2C%20strtotime(%20%24start_of_week%2B%2B%20-%20date(%20’w’%2C%200%20)%20.%20’%20day’%2C%200%20)%20)%20)%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20array_combine(%0A%20%20%20%20%20%20%20%20%20%20%20%20array_merge(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20array_slice(%20range(%200%2C%206%20)%2C%20%24start_of_week%2C%207%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20array_slice(%20range(%200%2C%206%20)%2C%200%2C%20%24start_of_week%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%09range(%200%2C%206%20)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%3B%0A%7D » message= » » highlight= » » provider= »manual »/]

Merci Monsieur, au plaisir.

De rien, à tout à l’heure.

Image à la une Vincent van Zalinge

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum