首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中堆叠多个三元运算符

在PHP中堆叠多个三元运算符
EN

Stack Overflow用户
提问于 2011-03-09 00:54:28
回答 10查看 38.3K关注 0票数 41

这是我写的:

代码语言:javascript
复制
 $Myprovince = (
($province == 6) ? "city-1" :
($province == 7) ? "city-2" :
($province == 8) ? "city-3" :
($province == 30) ? "city-4" : "out of borders"
);

但是对于每个字段,我都得到了city-4的值。我想使用三元运算符而不是switch/if,因为我想进行实验,看看它是如何实现的。

这段代码有什么问题?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-03-09 01:02:29

其他人已经提出了正确的方法,但如果你真的想使用三元运算符,你需要使用括号作为:

代码语言:javascript
复制
$province = 7;
 $Myprovince = (
 ($province == 6) ? "city-1" :
  (($province == 7) ? "city-2" :
   (($province == 8) ? "city-3" :
    (($province == 30) ? "city-4" : "out of borders")))
 );

Updated Link

票数 102
EN

Stack Overflow用户

发布于 2011-03-09 00:57:38

不要滥用三元运算符来做这类事情。这使得调试几乎不可能进行。为什么不这样做呢?

代码语言:javascript
复制
switch($province) {
    case 6: $Myprovince = "city-1"; break;
    case 7: ...
}

或者仅仅是一些链接的if/then/else

代码语言:javascript
复制
if ($province == 6) {
     $Myprovince = "city-1";
} elseif ($province = ...) {
   ...
}
票数 18
EN

Stack Overflow用户

发布于 2011-03-09 01:22:13

有些人建议使用switch语句或if/else语句。但我会使用数组来代替,以使其更易于维护和读取:

代码语言:javascript
复制
$provinces = array (
    6 => 'city-1',
    7 => 'city-2',
    8 => 'city-3',
    30 => 'city-4'
);

// then you can call:

$Myprovince = isset($provinces[$province]) ? $provinces[$province] : 'out of borders';

为什么?

代码最终可能会更容易管理。也许有一天您会想要从数据库中添加这些省到市的映射。等等。这将很难用一堆switch/case语句来维护。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5235632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档