是否有可能以某种方式将其改写为更短?
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
else {
$pic_action=0;
}
我已经在某个地方看到了但忘记了......:/
顺便说一下,如果你愿意,也请解释你的代码!由于
答案 0 :(得分:18)
您可以使用conditional operator ?:
:
$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
如果expr1 ? expr2 : expr3
的评估返回值为 true ,则条件运算符表达式expr2
将计算expr1
的返回值;否则表达式求值为expr3
的计算返回值。因此,如果isset($_POST['pic_action'])
计算为 true ,则整个表达式的计算结果为$_POST['pic_action']
的评估值,否则评估为0
的评估值。
简而言之:如果isset($_POST['pic_action'])
为真,则$pic_action
将保留$_POST['pic_action']
和0
的值。
答案 1 :(得分:8)
Gumbo的回答可能是最好的方式。
它也可以写成:
$pic_action = 0;
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
答案 2 :(得分:2)
$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;
答案 3 :(得分:1)
$pic_action = array_get($_POST, 'pic_action', 0);
上面的行需要下面定义的array_get
函数。来自Kohana's Arr
class的来源。非常小而通用的功能。可用于所有阵列,例如$_GET
。
/**
* Retrieve a single key from an array. If the key does not exist in the
* array, the default value will be returned instead.
*
* @param array array to extract from
* @param string key name
* @param mixed default value
* @return mixed
*/
function array_get(array $array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}
答案 4 :(得分:0)
更长,但可重复使用:
$pic_action = QueryPost('pic_action', 0);
function QueryPost($name, $default='', $valid=false) {
if (!isset($_POST[$name])) return $default;
if (($valid) and (empty($_POST[$name]))) return $default;
return $_POST[$name];
}
或者您可以让QueryPost函数在您使用时执行一种验证形式。
$pic_action = QueryPost('pic_action', 'int', 0);
function QueryPost($name, $rule, $default='', $valid=false) {
// this shouldn't be too hard to write
}
答案 5 :(得分:0)
你可以这样做:
$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;