我正在使用三元if语句,因为我不能使用switch进行以下操作,但是,有更好的方法吗?我最近读到这些可能是资源匮乏的? (这可以在页面中多次调用)
$filter= (
($price_check > '0' && $price_check < '20.01') ? '020' :
(($price_check > '20.00' && $price_check < '50.01') ? '2050' :
(($price_check > '50.00' && $price_check < '100.01') ? '50100' :
(($price_check > '100.00' && $price_check < '200.01') ? '100200' :
(($price_check > '200.00' && $price_check < '500.01') ? '200500' :
(($price_check > '500.00') ? '501' : '0'
))))));
答案 0 :(得分:8)
谈论三元运算符的“效率”是一个红色的鲱鱼。它的速度并不重要,如果将代码放在计算绑定应用程序的内部循环中(这几乎肯定不是),它可能仍然无关紧要。
你应该提出的问题是“六个月后,当我需要做出改变时,我是否想在我面前找到这个?”。
应始终将可维护性作为经验。如果您不知道此代码确实是瓶颈的事实,您应该尽可能方便地编写它。
因此,您可能会考虑性能较差但更易于维护的替代样式,例如:
$data = array(
'0' => '020',
'20.00' => '2050',
'50.00' => '50100',
// ...
);
$price_check = '...';
$filter = '0'; // default value
foreach ($data as $floor => $value) {
if ($floor > $price_check) break;
$filter = $value;
}
答案 1 :(得分:2)
只是想指出你可以简化你的范围检查,每个“elseif”的下限是不必要的,因为如果匹配它就不会调用下一个测试条件:
$filter = (
$price_check <= 0 ? '0' :
($price_check <= 20 ? '020' :
($price_check <= 50 ? '2050' :
($price_check <= 100 ? '50100' :
($price_check <= 200 ? '100200' :
($price_check <= 500 ? '200500' :
'501'
))))));
答案 2 :(得分:2)
在今天的计算中,除非您在嵌入式系统领域工作,人工时间远比计算机时间更有价值:a计算机将采取几纳秒的方式,瓶颈将在其他地方(更可能在网络传输)。相反,您应该问问自己,以这种方式编写的代码是否更容易为您理解与否。
同时请记住,随着语言的改进,今天的效率不高,明天可能会更好。
答案 3 :(得分:0)
(是的,我知道这个问题已经很久了,但感觉要加入我自己的两分钱。)虽然有很多方法可以给猫皮肤。我想发布一些我做过多次测试的观察结果。您也可以在http://3v4l.org/(在线PHP&amp; HHVM Shell)上应用相同的测试和/或应用它们。要测试你应该运行多个来正确评估差异。在测试中,我接受了WebChemist的回应并将其撤消了。为什么?有时玩游戏很有趣。然而,实际结果显示三元整体有微观改善。使用各种输入值。
$price_check = '...';
$filter = (
( $price_check > '500') ? '501' :
(($price_check > '200') ? '200-500' :
(($price_check > '100') ? '100-200' :
(($price_check > '50') ? '50-100' :
(($price_check > '20') ? '20-50' :
(($price_check > '0') ? '0-20' :
'0'
))))));
然后,虽然下一个例子可以得到更好的改进,但它只是一个例子。所以不要把它判断为生产水平。这只是三元和if / else之间的一个想法。总体而言,if / else的性能优于三元应用。主要做了这个测试,因为我总是读两端,三元更容易阅读,或者if / else更容易阅读。我说两者都可以在下面的例子中提供。最后,我真的相信你使用的一个或哪个取决于具体情况。至于这些数据与过滤价格之间的关系。 if / else最终在速度上超过了三元组。它也很容易阅读(我认为)。最后它的所有微型爵士乐如此真的无关紧要。那些不同意的人可以在自己的环境中进行自己的测试,或者去提供的网站。有时比在互联网上相信单词更好。我在我自己的环境(也就是那个网站)上进行了很多测试,以得出一些基本结论。我仍然喜欢用三元和if / else参数阅读。一些好的读取浮动在网络上。此外,如果在示例中通过真正的错误你。过去它不会影响性能,甚至整体返回使用此代码更快。您可以在转义中编码,或者完全重构它。
$price_check = '...';
$filter='501';
if($price_check > '500' || $filter='200-500')
if($price_check > '200' || $filter='100-200')
if($price_check > '100' || $filter='50-100' )
if($price_check > '50' || $filter='20-50' )
if($price_check > '20' || $filter='0-20' )
if($price_check <= '0') $filter=0;
我想补充一点,如果数据中等大小,Jon对阵列的建议可能是最好的。三元和if / else可以处理大多数基本巢。温和推荐列表。应该将更多内容推送到数据库并进行访问。另外我稍微修改了Jon的代码。 (如果您 深入 嵌套三元组,而if / else通过数据库存在问题。)
$data = '20.00';
$range = '';
$arr = [
'0',
'20' => '0-20',
'50' => '20-50',
'100' => '50-100',
'200' => '100-200',
'500' => '200-500'
];
foreach ($arr as $floor => $value) {
$range = $value;
if ($floor >= $data)break;
} echo $range;