Tableau et rubriques

Mammouth du PHP | 965 Messages

30 oct. 2008, 18:18

Bonjour,

Je suis sur un projet ou dans une page nous avons des sous rubriques, qui en fonction afficheront des images et des liens et je veux être sur que ces éléments existent et qu'ils sont facilement modulables, j'ai donc utiliser la méthode suivante :
// Tableau des differentes rubriques 
$rub  = array('page1'  => 'titre1',
              'page2' => 'titre2',
              'page3' => 'titre3',
              'page4' => 'titre4',
              'page5' => 'titre5');
              
// En fonction de la rubrique on retrouve le titre et le lien              
if(isset($_GET['rubrique']) && array_key_exists($_GET['rubrique'],$rub))
{
  foreach($rub as $element => $value):

    if($_GET['rubrique'] == $element)
    {
      $page  = $element; 
      $titre = $value;
    }

  endforeach;
}
else
{
  // Retourner la première clef et première valeur du tableau
  $reset = reset($rub);
  $keys  = array_keys($rub,$reset);
  $page  = $keys[0];
  $titre = current($rub); 
}         
Mais voilà dans la dernière partie je trouve ca très sale, retrouver la première valeur et la première clef d'un tableau il doit y avoir beaucoup plus simple, de plus je pense pas que ce code soit le plus optimisé possible.

Des idées ?

ViPHP
ViPHP | 4674 Messages

06 nov. 2008, 16:53

Hey :),

Je ne sais pas trop quoi te dire car je ne comprends pas tout :-k … Néanmoins, si j'ai quelque chose à dire sur ton code, c'est ton foreach. Pourquoi ne pas utiliser directement un bloc comme ceci :
foreach($array as $key => $value) {

    // traitement ici.
}
au lieu de :
foreach($array as $key => $value):

    // traitement ici.
endforeach;
La première solution est plus légère, la seconde est plus destinée à des graphistes (pour des templates).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 965 Messages

07 nov. 2008, 11:03

J'utilise cette syntaxe pour avoir une meilleur lisibilité du code.

Pour ton :
foreach() { 
}
J'utiliserais plus :
foreach()
{
  // code
}
Je ne comprends pas pourquoi tu met le bracket juste après la condition, je préfère utiliser cette méthode pour mieux voir les début et fins de de boucles.

ViPHP
ViPHP | 4674 Messages

07 nov. 2008, 11:08

C'est un peu comme tu veux. Ça dépend des règles que tu t'aies fixé. Mais le endforeach;, c'est un peu lourd à mon goût :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 965 Messages

07 nov. 2008, 11:37

C'est un peu comme tu veux. Ça dépend des règles que tu t'aies fixé. Mais le endforeach;, c'est un peu lourd à mon goût :).
Pour aller plus loin j'aimerais bien savoir s'il y a oui ou non des règles la dessus, car sous symfony c'est if / endif et foreach / endforeach.

Du moins sur les tutoriels ils font comme ça et j'ai commencer a réutiliser cette méthode sur d'autres projets, questions d'habitudes surement.

Donc est ce qu'il y a des normes la dessus, qu'est ce qui est le mieux à faire ?

ViPHP
ViPHP | 4674 Messages

09 nov. 2008, 03:08

Hey et pardon pour le retard, je ne t'avais pas oublié …

Je ne sais pas où tu as vu que Symfony utilise foreach:/endforeach; ? C'est une technique utilisée pour les graphistes entre autre que je trouve assez moche … Si on s'en sert, c'est uniquement dans les templates et encore. Mais pas dans du code 100% PHP, ça n'a pas de sens et on n'en a pas besoin.
Écrire un bloc avec des accolades est nettement plus simple.
Pour rappel, si le bloc est constitué que d'une seule ligne, on peut omettre les accolades, i.e. :
foreach($array as $key => $value) {

    var_dump($key, $value);
}

// est équivalent à

foreach($array as $key => $value)
    var_dump($key, $value);
Ensuite, savoir où on place les accolades, certains préfèrent les mettre en bout de ligne, d'autres sur une nouvelle ligne etc. Bref, il existe plusieurs façons, chacun fait comme il veut. Il faut juste que pour toi, tu définisses des conventions claires et que tu les tiennes. Par exemple Conventions de codages et de nommages pour Hoa Framework ou Coding Standards de PEAR etc. Chacun utilise les siens mais on essaye quand même d'avoir des conventions cohérentes. Je sais que j'ai tendance à utiliser des conventions proches de PEAR car elles me conviennent bien. Le code est esthétique, lisible, et on y navigue facilement.

Chacun utilise ses conventions, ce n'est pas grave. L'important est de s'y tenir.

Après, on peut aussi parler des tabulations ou des 4 espaces, de Vi et d'Emacs … mais la nuit risque d'être longue ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 nov. 2008, 10:06

Pour rappel, si le bloc est constitué que d'une seule ligne, on peut omettre les accolades
d'une seule instruction ! ;)
Une ligne ne détermine pas le nombre d'instructions...

Mammouth du PHP | 965 Messages

12 nov. 2008, 12:10

Merci pour cette réponse complète HyWan je vais utiliser la même méthode partout c'est plus pratique en effet symfony utilise la méthode du foreach / endforeach (cf le tutoriel 'askeet' http://www.symfony-project.org/askeet/1_0/fr/3 ).

Mais dans le cas du askeet cela concerne bien uniquement la partie 'graphique' c'est à dire les div.

Mais c'est bien présent sur le tutoriel :p