通过三元运行设置或不设置数组值

时间:2014-01-13 16:54:01

标签: php ternary-operator

这可能是一个愚蠢的问题:

我正在执行以下操作以在我转换为CSV下载的数组中设置标头。 CSV部分与此问题无关,因为它的工作正常。

数组标题:

$csv_fields  = array();
$csv_fields[0]   = array();
$csv_fields[0][] = 'Category';
$csv_fields[0][] = 'Question';
$csv_fields[0][] = 'Case';
$csv_fields[0][] = 'Partner';
// ... etc

现在我想根据脚本Posted的复选框设置头部。我打算使用大量的if, else语句,如下:

if ($_POST['category']) {

    $csv_fields[0][] = 'Category';

elseif ($_POST['question']) {

    $csv_fields[0][] = 'Question';

}
// .... etc

但是认为使用三元运算符可能有更好的方法。我尝试了以下操作,但当然如果未设置$_POST,它仍会为数组添加空值,因此我的标题中会出现空白。

$csv_fields[0][] = isset($_POST['category']) ? 'Category' : NULL;
// ... etc

我最终得到的结果是:

[0] => 
[1] => Question
[2] => 
[3] => Partner
// ... etc

所以我的问题是,如果未设置$_POST变量,如何使用三元运算符跳过而不是设置数组值?

或者有更好的方法吗?

由于

2 个答案:

答案 0 :(得分:1)

我认为三元运营商不会帮助你解决这个问题。 但是你可以缩短你的代码,因为它有很多样板,你可以把所有东西都移到循环中。

$vars = array(
    'category' => 'Category',
    // ...
);

foreach ($vars as $name => $text) {
    if (isset($_POST[$name])) {
        $csv_fields[0][] = $text;
    }
}

答案 1 :(得分:0)

您可以将三元与array_merge()结合使用。

$csv_fields[0] = array_merge($csv_fields[0], 
                             isset($_POST['category']) ?
                             array('Category') : array());

既不漂亮也不高效。更好地使用循环。