2013-12-19 190 views
26

我有一個數組如何從數組中刪除空值?

陣列([0] => 0 [1] => [2] => 3 [3] =>)

我想從這個和的結果除去空值應該是這樣的

Array([0] => 0 [1] => 3) 我不想從數組中刪除0值。

+0

http://www.php.net/具有自定義回調的array_filter。 – Cthulhu

+0

在php.net上查找數組過濾器 –

回答

19

您可以使用array_filter()將得到從陣列

print_r(array_filter($arr, 'strlen')); 
+0

這不起作用。 (array_filter([0,null,false,'hi',''],'strlen'));「 陣列(2){ [0] => INT(0) [3] => 串(2)的 「hi」 } – Rob

+0

這還將刪除 '0',在一般假的,或falsey值可能具有忘記了別人。 – Gokigooooks

+0

這將包括''這不是空的 –

5

擺脫空的空值你可以遍歷它。

<?php 
foreach ($array as $i=>$row) { 
    if ($row === null) 
     unset($array[$i]); 
} 

CodePad

如果你想重新索引陣列刪除鍵之間的間隙,你可以使用一個新的數組:

<?php 
$array2 = array(); 
foreach ($array as $row) { 
    if ($row !== null) 
     $array2[] = $row; 
} 
$array = $array2; 

CodePad

1

你是在一個世界現在已經出現了麻煩,因爲從0中區分「0」和「0」的錯誤並不太容易。但不用擔心,它是可以解決的:

$result = array_filter($array, 'strlen'); 

這本身是可怕的,但似乎工作。

編輯:

這是不好的建議,因爲招在一個陌生的角落情況下湊到:

  • 的strlen(0)將strlen的( 「0」) - > 1,從而真正
  • strlen的(NULL)將strlen的( 「」) - > 0,因此假
  • 的strlen( 「」)將被strlen的(( 「」) - > 0,因此假 等

你應該這樣做的方式是這樣的:

$my_array = array(2, "a", null, 2.5, NULL, 0, "", 8); 

function is_notnull($v) { 
    return !is_null($v); 
    } 

print_r(array_filter($my_array, "is_notnull")); 

這是很好的可讀性。

49

這將這樣的伎倆:

array_filter($arr, function($var){return !is_null($var);}); 

代碼示例:http://3v4l.org/icEDa


舊版本(PHP < 5。3):

function is_not_null ($var) { return !is_null($var); } 
$filtered = array_filter($arr, 'is_not_null'); 

代碼示例:http://3v4l.org/CKrYO

+1

只適用於較新的版本,但這比奇怪的strlen更好。 –

+2

對於舊版本,可以預先聲明使用的功能。 – Cthulhu

+0

爲較舊的php版本添加代碼示例 – floww

2
<?php 
$arr = array(0 => 0, 1=>null, 2=>3, 3=>null); 
foreach ($arr as $key=>$val) { 
    if ($val === null) 
     unset($arr[$key]); 
} 
$new_arr = array_values($arr); 
print_r($new_arr); 
?> 

停止放:

Array 
(
    [0] => 0 
    [1] => 3 
) 
0

簡單地

$keys=array_keys($yourArray,NULL); 
if(!empty($keys)) 
{ 
foreach($keys as $key) 
{ 
unset($yourArray[$key]); 
} 
} 
var_dump($yourarray);