2

在 JavaScript 中,我可以执行以下操作:

var variable = {
  variable: arg || "bla";
}
// variable.variable = "bla" if arg is false, null or unefined
var variable [
   arg || "bla
]
// variable[0] = "bla" if arg is false, null or unefined

如果未定义 arg,则该值将变为“bla”。挺整洁的。我喜欢这个!

php中有类似的可能吗?我可以if用 an做一个isset(),但这会产生很多代码,特别是如果我有一个这样的数组,例如:

$postData = array(
    'birthday' => $aData['oBirthday'] /* ????? */,
    'country' => $aData['sCountry'],
    'first_name' => $aData['sFirstName'],
    'last_name' => $aData['sLastName']
);

编辑:

到目前为止我发现的最短的语法(感谢汤姆!):

$postData = array(
'birthday' => isset($aData['oBirthday']) ? $aData['oBirthday'] : "aaaaaaaa"
);
4

4 回答 4

4

是的,PHP 有?:同样的操作符。

$var = arg ?: "bla";

这是一个三元运算符,通常写为condition ? if_true : if_false but :

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

于 2013-07-05T22:25:17.277 回答
3

几年前我也遇到过同样的问题,我的解决方案是一个简单的函数:

function GetArrayData(array $array, $key, $default = NULL)
{
  return isset($array[$key]) ? $array[$key] : $default;
}

不是太优雅,但绝对安全。使用 $_GET 或 $_POST 作为数组,您还可以很好地读取表单或查询字符串数据。我也使用类似的方法来获取会话值。

于 2013-07-05T22:38:51.023 回答
1

对于单个参数,请使用三元运算符,可能是 Tom 在他的回答中提出的形式。

对于参数数组,您可以使用array_merge()

$defaults = array(
    'birthday' => '1980-03-04',
    'country' => 'United States',
    'first_name' => 'John',
    'last_name' => 'Smith',
);

$params = array(
    'first_name' => 'Jane',
    'last_name' => 'Johnson',
);

$results = array_merge($defaults, $params); // uses $defaults as base

证明在这里:http: //ideone.com/0CewM1

于 2013-07-05T22:38:55.523 回答
0

我知道这很难看,但您可以执行以下操作:

@ $var = $arr['key'] ?: DEFAULT_VALUE;

我有时会使用它,因为即使这很糟糕,我也知道它的作用,所以我允许自己使用它。

于 2014-02-04T10:01:20.883 回答