Alléger mon code

Eléphant du PHP | 94 Messages

11 juil. 2006, 13:28

Bonjour

Je récupère à partir d'un fichier texte plat sans séparateur des horaires d'ouvertures.
L'information disponible pour les horaires d'une journée sont sur 16 caractères donc 112 (7x16) pour la semaine.

Les 16 caractères se décomposent ainsi :
4 car. pour l'horaire d'ouverture matin
4 car. pour l'horaire de fermeture matin
4 car. pour l'horaire d'ouverture ap midi
4 car. pour l'horaire de fermeture ap midi

Pour les boutiques qui ne ferment pas le midi, seuls les 4 car. pour l'horaire d'ouverture du matin + 4 car. pour l'horaire de fermeture de l'ap. midi sont renseignés.
Donc on peut avoir :

0900000000001700 pour 09h00 - 17h00
0835115513351740 pour 08h35 - 11h55 / 13h35 - 17h40

J'ai donc fait le code suivant (pour les horaires du lundi .. je dois donc reproduire pour chaque jour)
$varlu1=(intval(substr($ligne,419,4))>0) ? substr($ligne,419,2)."h".substr($ligne,421,2) : "";
   $varlu2=(intval(substr($ligne,423,4))>0) ? " - ". substr($ligne,423,2)."h".substr($ligne,425,2) : "";
   $varlu4=(intval(substr($ligne,427,4))>0) ? substr($ligne,427,2)."h".substr($ligne,429,2) : "";
   $varlu3=($varlu2 and $varlu4) ? " / " : "";
   $varlu5=(intval(substr($ligne,431,4))>0) ? " - ". substr($ligne,431,2)."h".substr($ligne,433,2) : "";
   $varlu = "{$varlu1}{$varlu2}{$varlu3}{$varlu4}{$varlu5}";
pour obtenir : HHhMM - HHhMM pour les boutiques ouvertes toutes la journée (ou uniquement le matin ou uniquement l'après midi) et HHhMM - HHhMM / HHhMM - HHhMM pour les boutiques observant une fermeture le midi.

Je sollicite donc votre avis sur ce code dans la mesure où :
-> je dois reproduire ce code pour les 7 jours
-> je stocke les variables obtenues dans mysql
-> je ne veux pas conserver les horaires à 0000 (c'est à dire non renseigné)

En clair, mon code peut il être simplifié ? ou est ce que je peux rester sur ce code en le dupliquant pour chaque jour de la semaine ?

LAR
rspir

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juil. 2006, 15:00

Y aurait pas grand chose à redire à ton code.. on peut surement l'optimiser un peu, mais il n'y a pas tellement de choix pour découper des chaines :)

Par contre, ce que tu aurais intérêt à faire c'est de coller tout ça dans une fonction pour pouvoir l'appeller chaque jour sans avoir à le répéter...

Tu pourrais par exemple passer l'index indiquant le début de chaque jour en paramètre :
/**
 * @param String : la ligne concernée
 * @param int : la position du jour demandé
 * @return String : la chaine avec les horaires
 */
function horaires($ligne, $index) {
  $varlu1=(intval(substr($ligne,$index,4))>0) ? substr($ligne,$index,2)."h".substr($ligne,$index+2,2) : ""; 
  $varlu2=(intval(substr($ligne,$index+4,4))>0) ? " - ". substr($ligne,$index+4,2)."h".substr($ligne,$index+6,2) : ""; 
  ...
  return $varlu;
}

// et tu pourrais ainsi l'appeler :

$lundi = horaires($ligne, 419);
$mardi = horaires($ligne, 435);
...