【问题标题】:Setting or not setting array value via Ternary Operation通过三元运算设置或不设置数组值
【发布时间】:2014-01-14 01:34:22
【问题描述】:

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

我正在执行以下操作来设置我转换为 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 变量,我如何使用三元运算符跳过而不是设置数组值?

或者有没有更好的方法?

谢谢

【问题讨论】:

  • 合作伙伴来自哪里?
  • 这只是我设置的另一个标题。您可以看到我在上面的第一个代码块中隐式设置它。这只是一个例子。我不想展示我的整个脚本,因为很清楚我想从 sn-p 做什么。你应该能够从中推断出来......

标签: php ternary-operator


【解决方案1】:

我认为三元操作员无法帮助您解决这个问题.. 但是你可以缩短你的代码,因为它有很多样板,你可以把所有的东西都移动到一个循环中。

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

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

【讨论】:

  • 这似乎是赢家。不敢相信我自己没有达到这个解决方案。
【解决方案2】:

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

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

它既不漂亮也不高效。最好使用循环。

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 2017-02-26
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多