L'opérateur ternaire est évalué de gauche à droite. Donc, si vous ne groupez pas les expressions correctement, vous obtiendrez un résultat inattendu.
Le conseil de PHP est [docs] :
Il est recommandé d'éviter d'"empiler" les expressions ternaires. Le comportement de PHP lorsqu'il utilise plus d'un opérateur ternaire dans une même déclaration n'est pas évident.
Votre code est en fait évalué comme :
(
(
(
$province == 6 ? "city-1" : $province == 7
) ? "city-2" :
$province == 8
) ? "city-3" : $province == 30
) ? "city-4" : "out of borders";
où il devrait être
$province == 6 ? "city-1" : (
$province == 7 ? "city-2" : (
$province == 8 ? "city-3" : (
$province == 30 ? "city-4" : "out of borders"
)
)
);
Ce code peut sembler parfait, mais quelqu'un le lira et aura besoin de plus de temps que nécessaire pour comprendre ce qu'il fait.
Vous seriez mieux avec quelque chose comme ça :
$map = array( 6 = >'city-1',
7 => 'city-2',
8 => 'city-3',
30 => 'city-4');
$Myprovince = "out of borders";
if(array_key_exists($province, $map)) {
$Myprovince = $map[$province];
}
Ou comme @Jonah mentionné dans son commentaire :
$Myprovince = isset($map[$province]) ? $map[$province] : 'out of borders';