4

可能重复:
删除空数组元素

我想从数组中删除空元素。我有一个字符串,它被设置为一个数组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()功能,但结果是一样的。

4

3 回答 3

8

如果文件有\r\n一个回车符,就像那个文件一样,拆分 with\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);
于 2012-07-10T18:10:28.843 回答
1
$arr = array('one', '', 'two');
$arr = array_filter($arr, 'strlen');

请注意,这不会重置键。以上将为您留下一个由两个键组成的数组 -02. 如果您的数组是索引的而不是关联的,您可以通过以下方式解决此问题

$arr = array_values($arr);

键现在是01

于 2012-07-10T18:07:58.683 回答
0

这就是你需要的:

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

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

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

于 2012-07-10T18:26:28.347 回答