Php 内爆空数组

Alk*_*lko 1 php implode

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

Array
(
    [field1] => 
    [field2] => 
)
Run Code Online (Sandbox Code Playgroud)

然后做类似的事情:

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

$data = implode("::", $result);
Run Code Online (Sandbox Code Playgroud)

我最终得到:

::
Run Code Online (Sandbox Code Playgroud)

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

Array
(
    [field1] => "hello"
    [field2] => 
)
Run Code Online (Sandbox Code Playgroud)

然后内爆就可以正常工作了。

Fra*_*erZ 5

用于array_filter()在实际内爆数组之前过滤数组(删除空元素)。

根据文档array_filter()

如果未提供回调,则数组中所有等于 FALSE 的条目(请参阅转换为布尔值)将被删除。

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

$result = array_filter($result, function($val) {
    return $val !== '';
});
Run Code Online (Sandbox Code Playgroud)

最终代码:

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

$result = array_filter($result);

$data = implode("::", $result);
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看它的实际效果。

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

$result = array();
foreach ($array as $val) {
   if ( $val !== '' ) {
       array_push($result, $val);
   }
}
Run Code Online (Sandbox Code Playgroud)