在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
进行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"
);
答案 0 :(得分:4)
是的,PHP有?:
运算符也是如此。
$var = arg ?: "bla";
这是ternary operator,通常写为condition ? if_true : if_false
,但是:
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
答案 1 :(得分:3)
几年前我遇到了同样的问题,我的解决方案是一个简单的功能:
function GetArrayData(array $array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}
不太优雅,但很安全。使用$ _GET或$ _POST作为数组,您还可以很好地阅读表单或查询字符串数据。我也使用类似的方法来获取会话值。
答案 2 :(得分:1)
对于单个参数,使用ternary operators,可能采用Tom在his answer中提出的表单。
对于参数数组,您可以使用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
答案 3 :(得分:0)
我知道这很难看,但你可以做到以下几点:
@ $var = $arr['key'] ?: DEFAULT_VALUE;
我有时会使用它,因为即使这很糟糕,我知道它的作用,所以我允许自己使用它。