Bonjour,
Peut-on faire plus court ?

    switch ($_GET['pof']) :
    case $_GET['pof'] = flambys :
    $title_page = $menu[flambys][title];
    $adresse = $infos[flambys][description];
    $key = $infos[flambys][keywords];
    break;
    case $_GET['pof'] = poivre :
    $title_page = $menu[poivre][title];
    $adresse = $infos[poivre][description];
    $key = $infos[poivre][keywords];
    break;
    case $_GET['pof'] = rose :
    $title_page = $menu[rose][title];
    $adresse = $infos[rose][description];
    $key = $infos[rose][keywords];
    break;
    case $_GET['pof'] = espoir :
    $title_page = $menu[espoir][title];
    $adresse = $infos[espoir][description];
    $key = $infos[espoir][keywords];
    break;

    case $_GET['pof'] = oeuf :
    $title_page = $menu[oeuf][title];
    $adresse = $infos[oeuf][description];
    $key = $infos[oeuf][keywords];
    break;

endswitch;

Merci.

10 réponses


Naïr
Réponse acceptée

Salut, effectivement on peut faire plus "court" :

$title_page = $menu[$_GET['pof']][title];
$adresse = $infos[$_GET['pof']][description];
$key = $infos[$_GET['pof']][keywords];

Lartak
Réponse acceptée

Bonjour.
@Frank Hélin : Tu n'utilises pas correctement le switch, c'est par exemple :

switch ($_GET['pof']):
    case 'flambys': /* et non : */ case $_GET['pof'] = flambys :
        /* code ... */
        break;
    case 'poivre':
        /* code ... */
        break;
    /* etc ... */
endswitch;

Sinon, la proposition de Naïr est plutôt correcte, bien que comme toi, il oubli des apostrophes/quotes.
@Naïr: Tu aurais pu mettre le code dans la balise adéquate.

<?php
$getValPof = $_GET['pof'];
$title_page = $menu[$getValPof]['title'];
$adresse = $infos[$getValPof]['description'];
$keywords = $infos[$getValPof]['keywords'];

Par contre, je te conseille de faire un nettoyage et une vérification de la valeur du paramètre passée en get dans l'url, car il ne faut pas oublier, que les valeurs des paramètres passées dans l'url, sont facilement modifiables et peuvent causer des erreurs lorsque c'est le cas.

PhiSyX
Réponse acceptée

En gros si tu fais un if, ça revient au même là…, t'économises 3 lignes.

Ramzz1994
Réponse acceptée

Pourquoi une switch dans ce cas ?

$getValidc = $_GET['pof'];
$title_page = $menu[$getValpof]['title'];
$adresse = $infos[$getValpof]['description'];
$keywords = $infos[$getValpof]['keywords'];

Ça te suffit pas ? Tes tableaux associatifs ($menu et $infos) te permettent d'éviter d'utiliser les structures de contrôle tel que la switch ! (dans ton cas) C'est absolument inutile d'avoir une switch avec une seule condition de sortie.

En effet je n'utilisais pas switch correctement, merci à vous. Toutefois, quelles peuvent être les conséquences d'un mauvais usage de switch.
Je demande cela par curiosité étant donné que ma façon de l'utiliser fonctionnait.

Sinon, n'y a t-il pas une façon beacoup plus courte d'obtenir le même résultat ? Je rêve d'une seule ligne. Est-ce utopique ?

quelles peuvent être les conséquences d'un mauvais usage de switch.

C'est en premier lieu que tu fais de la répétition de code, par exemple en répétant la variable $_GET['pof'].
Ensuite, quel est l'intérêt d'utiliser une fonctionnalité de PHP, si c'est pour alourdir ton code au niveau du nombre de caractères ?
Le principal intérêt de switch est qu'en lui attribuant une variable, de pouvoir tester l'égalité des valeurs définies par la suite et de faire des actions différentes selon celles-ci, et ce, en un minimum de code.
Sinon, autant utiliser des if -> else ou des if -> elseif si c'est pour faire comme tu l'utilises.

Une fois de plus, @Lartak est dans le vrai, on ne peut pas mieux expliquer, GG :)

Grâce à vous j'ai trouvé la formule idéale :
(j'économise plus de 20 lignes !)

            switch ($_GET['pof']):
            case $_GET['pof']:
            $getValidc = $_GET['pof'];
            $title_page = $menu[$getValpof]['title'];
            $adresse = $infos[$getValpof]['description'];
            $keywords = $infos[$getValpof]['keywords'];
            break;
            endswitch;

Maintenant que j'ai raccourcis mon code, oui en effet. Merci.