我想用一个简单的if速记来检查一个数组是否有一个特定的键,如果是这样的话,那就不行了。
$test = array("hi" => "123");
isset($test["hi"]) ? unset($test["hi"]);
为什么会出现解析错误?什么是正确的语法。
答案 0 :(得分:7)
您不能在ternary conditional operator中使用unset()
,因为该语言构造不返回值,并且运算符期望计算某个值,而不是执行代码块。另外,您的三元运算符不完整(缺少:
组件)。
if语句如何更长?
if (isset($test["hi"])) unset($test["hi"]);
答案 1 :(得分:3)
因为它是ternary operator。这段代码:
$a = ($condition)? $b : $c;
相当于:
if($condition) $a = $b;
else $a = $c;
根据你的要求,不需要检查,你可以简单地unset()
数组元素而不先检查它,它不会给出任何错误信息:
unset($test["hi"]);
答案 2 :(得分:2)
三元条件运算符如下所示:
a ? b : c
您缺少c
子句,而您的b
子句不是返回值的表达式。这个结构不是if
语句的简写,而您试图使用它而不是它的设计。
使用if
声明:
if (isset($test['hi']))
unset($test['hi']);
还有更明确的array_key_exists
。将其文档与isset
的文档进行比较,以确定哪个更适合您的需求。
答案 3 :(得分:1)
您无需测试任何东西。如果您尝试取消设置非设置变量,则不会发生任何事情。
等同于您的代码:
$test = array("hi" => "123");
unset($test["hi"]);
即使未设置$test["hi"]
,您仍然可以取消设置...
答案 4 :(得分:0)
$test = array("hi" => "123");
!isset($test["hi"]) ?: unset($test["hi"]);