2012-07-10 74 views
2

可能重複:
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()函數來做,但結果是一樣的。

+6

你在哪裏調用'array_filter'? – 2012-07-10 18:05:43

+0

在這裏閱讀:http://stackoverflow.com/questions/3654295/remove-empty-array-elements – 2012-07-10 18:06:35

回答

7

如果文件\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); 
+0

謝謝你,這工作完美謝謝:) – 2012-07-10 18:17:51

+0

@downvoter:有問題嗎?隨意添加評論,甚至提出問題[請記住明確指出問題所在 - 我只假設上述不適用於您;這對我來說並不是很好]。 – LSerni 2014-06-23 10:42:27

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

注意,這不會重置密鑰。以上將爲您提供一組兩個密鑰 - 02。如果你的數組進行索引,而不是聯想可以通過

$arr = array_values($arr); 

解決這個問題的鑰匙,現在將01

0

這是你所需要的:

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

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

如果未提供回調,則輸入等於FALSE的所有條目都將被刪除。但在你的情況下,你有一個長度爲1的空字符串,它不是FALSE。這就是爲什麼我們需要提供回調