我一直试图以嵌套的形式使用isset()
,如下所示:
isset($_POST['selectedTemplate'])?$_POST['selectedTemplate']:isset($_GET['selectedTemplate'])?$_GET['selectedTemplate']:0
但似乎我错过了一些东西。谁能帮助我怎么做?
答案 0 :(得分:43)
用括号括起来:
$selectedTemplate = isset($_POST['selectedTemplate'])
? $_POST['selectedTemplate']
: (
isset($_GET['selectedTemplate'])
? $_GET['selectedTemplate']
: 0
);
甚至更好,使用正确的if
/ else
声明(为了可维护性):
$selectTemplate = 0;
if (isset($_POST['selectedTemplate'])) {
$selectTemplate = $_POST['selectedTemplate'];
} elseif (isset($_GET['selectedTemplate'])) {
$selectTemplate = $_GET['selectedTemplate'];
}
然而,正如其他人所指出的那样:使用$_REQUEST
会更容易:
$selectedTemplate = isset($_REQUEST['selectedTemplate'])
? $_REQUEST['selectedTemplate']
: 0;
答案 1 :(得分:3)
您可以更简单地使用$ _REQUEST变量:
“$ _ REQUEST是一个关联数组,默认情况下包含$ _GET,$ _POST和$ _COOKIE的内容。”
答案 2 :(得分:3)
如果我们以下列方式编写三元数,则更容易阅读:
$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');
但是三元运算符是编写简单if语句的简短有效方法。它们不是为嵌套而构建的。 :)
答案 3 :(得分:3)
这里有一点调查,我猜,我找到了真正的答案:)
示例代码:
<?php
$test = array();
$test['a'] = "value";
var_dump(
isset($test['a'])
? $test['a']
: isset($test['b'])
? $test['b']
: "default"
);
我想,你正在等待类似的行为:
var_dump(
isset($test['a'])
? $test['a']
: (isset($test['b']) // <-- here
? $test['b']
: "default") // <-- and here
);
但是!真实行为如下所示:
var_dump(
(isset($test['a']) // <-- here
? $test['a']
: isset($test['b'])) // <-- and here
? $test['b']
: "default"
);
一般错误是,您错过了通知:未定义索引。
答案 4 :(得分:3)
从php 7
开始,我们可以使用Null coalescing operator
$selectedTemplate = $_POST['selectedTemplate']) ?? $_GET['selectedTemplate'] ?? 0;
答案 5 :(得分:1)
而不是具有模棱两可的优先级的三元组,你可以使用$_REQUEST
代替fiddly $ _GET和$ _POST探测:
isset($_REQUEST['selectedTemplate']) ? $_REQUEST['selectedTemplate'] : 0
这正是它的用途。
答案 6 :(得分:1)
我相信这会奏效:
$test = array();
$test['a'] = 123;
$test['b'] = NULL;
$var = (isset($test['a']) ? $test['a'] : (!isnull($test['b']) ? $test['b'] : "default"));
echo $var;