从爆炸字符串中删除空数组元素

时间:2012-07-10 18:03:40

标签: php arrays explode

  

可能重复:
  Remove empty array elements

我想从数组中删除空元素。我有一个由explode()设置为数组的字符串。然后我使用array_filter()删除空元素。但这不起作用。请参阅以下代码:

$location = "http://www.bespike.com/Packages.gz";
$handle = fopen($location, "rb");
$source_code = stream_get_contents($handle);
$source_code = gzdecode($source_code);
$source_code = str_replace("\n", ":ben:", $source_code);
$list = explode(":ben:", $source_code);
print_r($list);

但它不起作用,$list仍然有空元素。我也尝试使用empty()函数,但结果是一样的。

3 个答案:

答案 0 :(得分:8)

如果文件有\r\n作为回车符,那么与\n分开会得到一个显示空的元素但不是 - 它包含\r

$source_code = gzdecode($source_code);
$list = array_filter(explode("\r\n", $source_code));
print_r($list);

您也可以尝试使用现有代码,替换“\ r \ n”而不是“\ n”(您仍然需要在某处使用array_filter)。

一个可能更慢但更灵活的选项使用preg_split和特殊的正则表达式元字符\R,它匹配任何换行符,包括Unix和Windows:

$source_code = gzdecode($source_code);
$list = array_filter(preg_split('#\\R#', $source_code));
print_r($list);

答案 1 :(得分:1)

$arr = array('one', '', 'two');
$arr = array_filter($arr, 'strlen');

请注意,这不会重置密钥。以上内容将为您提供两个键的数组 - 02。如果你的数组是索引而不是关联的,你可以通过

解决这个问题
$arr = array_values($arr);

密钥现在为01

答案 2 :(得分:0)

这就是你需要的:

$list = array_filter($list, 'removeEmptyElements');

function removeEmptyElements($var)
{
  return trim($var) != "" ? $var : null;
}

如果未提供回调,则将删除所有输入等于FALSE的条目。但在你的情况下,你有一个长度为1的空字符串,它不是FALSE。这就是为什么我们需要提供回调