如何使用php中的三元运算符中的unset

时间:2017-02-17 12:35:52

标签: php arrays ternary-operator

我想取消某些条件的值。如果我通过错误使用unset关键字,请在这种情况下帮助我。

$reportHeader = array("name" =>  !empty($name) ? "Name" : "0", 
    "number" => !empty($number) ? "Number" : "0");

在这种情况下我打印名称和数字存在,如果不存在我返回0.但我不需要打印0.如果条件失败我需要取消设置值。 我试过这样:

 $reportHeader = array("name" =>  !empty($name) ? "Name" : unset(), 
        "number" => !empty($number) ? "Number" : unset();

但它是通过错误

3 个答案:

答案 0 :(得分:2)

您不能像这样使用unset(),它希望将一个变量传递给它以取消设置(请参阅PHP documentation。而是使用null值填充数组,其值为尚未设置,然后使用array_filter删除您不想要的索引。

$reportHeader = array(
    "name" =>  !empty($name) ? "Name" : null,
    "number" => !empty($number) ? "Number" : null
);
// Now remove the 'unset' values
$reportHeader = array_filter($reportHeader);

答案 1 :(得分:0)

unset()需要一个或多个参数。因此,如果您启用了错误报告,并检查了此功能的文档,您将自己看到。那么问题是,你究竟想要取消什么?

您需要返回一些内容作为数组的值,而不是unset()成为值(就像您当前正在尝试的那样)。如果您只打算在值不为空时添加元素,则可以执行

$reportHeader = array();
!empty($name) ? $reportHeader['name'] = "Name" : null;
!empty($number) ? $reportHeader['number'] = "Number" : null;

如果数组不为空,则只为数组添加值。

虽然标准if也非常干净 - 只是因为可以写成三元运算符,并不意味着它应该。

if (!empty($name))
    $reportHeader['name'] = "Name";

答案 2 :(得分:0)

您只需使用以下代码

即可
!empty($name) ? $reportHeader["name"] = "Name" : "";
!empty($number) ? $reportHeader["number"] = "Number" : "";