我想从数组中删除空元素。我有一个由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()
函数,但结果是一样的。
答案 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');
请注意,这不会重置密钥。以上内容将为您提供两个键的数组 - 0
和2
。如果你的数组是索引而不是关联的,你可以通过
$arr = array_values($arr);
密钥现在为0
和1
。
答案 2 :(得分:0)
这就是你需要的:
$list = array_filter($list, 'removeEmptyElements');
function removeEmptyElements($var)
{
return trim($var) != "" ? $var : null;
}
如果未提供回调,则将删除所有输入等于FALSE的条目。但在你的情况下,你有一个长度为1的空字符串,它不是FALSE。这就是为什么我们需要提供回调