根据两个或多个变量的存在来设置变量的值

时间:2013-05-24 10:36:02

标签: php

我们如何根据一个或多个变量的存在来设置变量的值? 这有效,但我想知道PHP是否有一个“速记”版本:

if (isset($a)) { $x=$a; } elseif (isset($b)) { $x=$b; } 

如果你想要更大的图片,我需要给$ x $ _REQUEST ['a']或$ _GET ['a']的值,每次都存在。

编辑:三元运算符将为2个变量提供技巧。功能是否可以扩展超过2个?实施例

if (isset($a)) { $x=$a; } elseif (isset($b)) { $x=$b; } else { $x=$c; }

5 个答案:

答案 0 :(得分:3)

使用三元运算符:

$x = isset($a) ? $a : $b;

答案 1 :(得分:2)

我认为如果误用三元运算符很快就会变得难以理解。所以,让我建议另一种思维方式:

$x=$c;  // default
if (isset($b)) $x=$b;
if (isset($a)) $x=$a;

或者:

function first_set($array,$default=null){
    foreach($array as $e) if isset($e) return $e;
    return $default;
}

$x=first_set(array($a,$b),$c);

答案 2 :(得分:1)

您可以尝试这样做:

$x = ($a) ?: $b; // if you are using 5.3+

$x = ($a) ? $a : $b; // if >PHP5.3

答案 3 :(得分:1)

$x=isset($a)?$a:(isset($b)?$b:'default value');

您可以根据需要嵌套任意数量的条件。\

$x=isset($a)?$a:(isset($b)?$b:(isset($c)?$c:'other ternary condition'));

答案 4 :(得分:1)

您可以堆叠ternary运营商:

<?php
$x = isset($a) ? $a : (isset($b) ? $b : null);
?>

此外,它可能会扩展到:

<?php
$x = isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : null));
?>

注意:您需要大括号以避免非明显的执行。

  

建议您避免“堆叠”三元表达式。 PHP的   在单个中使用多个三元运算符时的行为   陈述不明显。

我建议,不要过多地混淆这些表达。它可能会影响代码的可读性。