5

我想将一个变量设置为一个值,但前提是条件为真。
而不是执行以下操作:

if($myarray["foo"]==$bar){  
    $variablename=$myarray["foo"];  
}  

如果变量名很长,或者可能涉及数组,这最终可能会很长,而我想做的事情很简单——如果条件为真,则设置一个值。

我想使用条件运算符,如下所示:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......

但这失败了,因为如果语句为假,我根本不希望设置变量。

基本上,我想做的是让第一个例子更短。也许条件运算符不是这种方式......

有没有人有什么建议?

4

9 回答 9

12

它不会比以下内容更短:

if($condition) $var = $value;
于 2009-07-16T16:16:33.467 回答
8

IMO,使您的代码示例更短的最佳方法是:

if($myarray["foo"] == $bar)
    $variablename = $myarray["foo"];

仅供参考,您要询问的运算符的名称不是“三元运算符”,而是条件运算符

既然您问了,那么您实际上可以使用条件运算符来完成您所要求的事情的一种方法是:

$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;

但这有点丑陋且难以维护。

于 2009-07-16T16:15:25.747 回答
3

你可以这样做,但我不会这样做,因为它非常难以理解和愚蠢:

$myarray["foo"] == $bar ? $variablename = $myarray["foo"] : 0;

或者

$myarray["foo"] == $bar && $variablename = $myarray["foo"];
于 2009-07-16T16:18:41.077 回答
2

您遇到的“问题”并不是真正的问题。您的示例代码非常清晰且可维护。我真的会说让它保持原样。

您 - 可以 - 移除大括号,但这会对可维护性产生影响。

您的另一种选择是创建一个 set_if_true(mixed array, string key, boolean conditional) 包装函数。它隐藏了真正发生的事情,但根据您的具体实现,这是一个不错的选择。(例如配置类型对象或缓存后端)

于 2009-07-16T16:45:54.467 回答
2

你的权利,三元不是要走的路。它用于处理语句的 if 和 else 部分。

只需坚持常规的 if 语句。

if($myarray["foo"]==$bar) $variablename=$myarray["foo"];
于 2009-07-16T16:15:40.147 回答
2

!=代替==?:代替只是?..

$variablename = ($myarray["foo"] != "bar") ?: $myarray["foo"];

是相同的

if($myarray["foo"] != "bar"){} else { $variablename = $myarray["foo"]; }

它可能不是最聪明的解决方案,但它确实有效。我更喜欢这个

if($myarray["foo"] != "bar") {$variablename = $myarray["foo"]};
于 2017-10-16T15:50:07.093 回答
0

在 false 情况下将变量设置为自身:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename
于 2009-07-16T16:15:02.813 回答
0

您可以将原始表达式放在else三元运算的一部分,但如果您想保证表达式的单一评估,那么您将不得不使用临时变量和if语句。

于 2009-07-16T16:16:18.037 回答
0

三元不是办法,即使它可以写成三元有效。

原因是这样的:您试图以不符合预期的方式使用它,这将使您的代码难以让其他开发人员阅读。

于 2009-07-16T16:16:36.867 回答