如何只将非空数组添加到数组?

时间:2014-08-19 14:33:40

标签: php arrays

我想避免多个if,我的问题是:

是否有函数或方法向数组添加多个数组($ a,$ b),但仅当数组($ a,$ b)不为空时?

假设:

$a = ['foo' => 'bar'];
$b = [];

我的代码:

$c = [];

if (count($a))
{
  $c['a'] = $a;
}

if (count($b))
{
  $c['b'] = $b;
}

是的,我需要具有特定名称的字符串键。

4 个答案:

答案 0 :(得分:5)

如果您的所有元素都是数组,那么您可以使用array_filter轻松地删除空元素。例如,利用您的密钥等于变量名称的事实,您可以简单地执行

$c = array_filter(compact('a', 'b'));

答案 1 :(得分:3)

嗯,怎么样

$c = array_filter(compact('a', 'b'));
开玩笑吧。我不是真的推荐这个。 "智能(驴)"代码很糟糕,尤其是在php中。要冗长,易读。

(看起来OP没有开玩笑。太糟糕了......)

答案 2 :(得分:1)

您可以执行以下操作:

$c = array();

function addToC(){
   foreach(func_get_args() as $arg){
    if(is_array($arg) && !empty($arg){
     $c[] = $arg; 
    }
   }
}

答案 3 :(得分:0)

这是非常hacky,只是掩盖了糟糕的设计,但有变量变量:

$to_do = array('a', 'b');
foreach ($to_do as $key) {
   if (count($$key)) {
     $c[$key] = $$key;
   }
}

注意加倍$。 e.g。

php > echo $bar;
PHP Notice:  Undefined variable: bar in php shell code on line 1
php > $foo = 'bar';
php > $$foo = 'baz';
php > echo $bar;
baz