Тернарный оператор вычисляется слева направо. Поэтому, если вы не сгруппируете выражения должным образом, вы получите неожиданный результат.
Советы PHP: [документы] :
Рекомендуется избегать «укладки» троичных выражений. Поведение PHP при использовании более одного тернарного оператора в одном выражении не очевидно.
Ваш код фактически оценивается как:
(
(
(
$province == 6 ? "city-1" : $province == 7
) ? "city-2" :
$province == 8
) ? "city-3" : $province == 30
) ? "city-4" : "out of borders";
где это должно быть
$province == 6 ? "city-1" : (
$province == 7 ? "city-2" : (
$province == 8 ? "city-3" : (
$province == 30 ? "city-4" : "out of borders"
)
)
);
Этот код может выглядеть хорошо, но кто-то прочтет его, и ему потребуется больше времени, чем нужно, чтобы понять, что делает этот код.
Вам было бы лучше что-то вроде этого:
$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];
}
Или как @ Иона , упомянутый в его комментарии:
$Myprovince = isset($map[$province]) ? $map[$province] : 'out of borders';