Php 内爆空数组

Php implode empty array

我有一个没有赋值的简单数组:

Array
(
    [field1] => 
    [field2] => 
)

然后做类似的事情:

$result = array();
foreach ($array as $val) {
   array_push($result, $val);
}

$data = implode("::", $result);

我最终得到:

::

那么,如果数组值为空,我该如何防止内爆生成分隔符? 如果我至少分配了一个值:

Array
(
    [field1] => "hello"
    [field2] => 
)

然后内爆就可以了。

在实际分解数组之前使用 array_filter() 过滤数组(删除空元素)。

根据 array_filter() 的文档:

If no callback is supplied, all entries of array equal to FALSE (see converting to boolean) will be removed.

这意味着(如果您只处理字符串),'' 或 '0' 将被删除。如果 0 是您 $result 中的有效字符串,则使用自定义回调函数:

$result = array_filter($result, function($val) {
    return $val !== '';
});

最终代码:

$result = array(
    'field1' => '',
    'field2' => ''
);

$result = array_filter($result);

$data = implode("::", $result);

您可以看到它的实际效果 here

编辑:另一种方法是首先防止空值进入数组:

$result = array();
foreach ($array as $val) {
   if ( $val !== '' ) {
       array_push($result, $val);
   }
}

您可以使用 array_filter() ,例如您的情况:

implode( ':', array_filter( $result ) );

这将在爆破之前过滤您的阵列。