PHP数组条件短语法

时间:2014-08-16 13:07:32

标签: php arrays

这是我所拥有的,我知道我可以重写我的条件语法,但我只是想看看我能用其他东西做些什么。

$sleeping[] = ($a->day_bed == 1) ? 'Day Bed' : false;
$sleeping[] = ($a->fold_up_bed == 1) ? 'Fold Up Bed' : false;
$sleeping[] = ($a->murphy_bed == 1) ? 'Murphy Bed' : false;
$sleeping[] = ($a->trundle_bed == 1) ? 'Trundle Bed' : false;

我试图测试一个空数组,而不是一个空数组:

Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => 
)

这永远不会注册为"空"。据我所知,我需要"否则"语法在那里否则失败。

除了NULLFALSE之外,我还能使用其他什么吗?或者任何其他格式化方式?我喜欢这种格式,因为我有大约600种,这使它更容易阅读。有什么建议?

2 个答案:

答案 0 :(得分:2)

您需要更改格式,因为在将另一个元素推送到数组之前需要检查是否存在。这应该有效:

if ($a->day_bed == 1) $sleeping[] = 'Day Bed';

通过自动完成此任务,您可以节省大量工作,例如像

$bedTypes = array(
    "day_bed" => "Day Bed",
    "fold_up_bed" => "Fold up bed"
);
foreach ($bedTypes as $key=>$val) {
    if ($a->{$key} == 1)
        $sleeping[] = $val;
}

答案 1 :(得分:0)

另一种方法是使用array_filter()而不使用回调来删除数组中的所有虚假元素:

<?php

$a = new stdClass();
$a->day_bed = false;
$a->fold_up_bed = false;
$a->murphy_bed = false;
$a->trundle_bed = false;

$sleeping[] = ($a->day_bed == 1) ? 'Day Bed' : false;
$sleeping[] = ($a->fold_up_bed == 1) ? 'Fold Up Bed' : false;
$sleeping[] = ($a->murphy_bed == 1) ? 'Murphy Bed' : false;
$sleeping[] = ($a->trundle_bed == 1) ? 'Trundle Bed' : false;

$emptySleeping = array_filter($sleeping);
if(empty($emptySleeping)) {
    // here code if the array is empty.
}

var_dump($sleeping);

var_dump($emptySleeping);

See it in action