Php内爆空数组[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

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

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

然后做类似的事情:

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

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

我最终得到:

::

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

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

然后内爆就可以了。

php implode
2个回答
2
投票

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

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

这将在插入数据之前过滤您的数组。


2
投票

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

根据array_filter()的文档:

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

这意味着(如果您只处理字符串),''或'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);
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.