如何从数组中删除空值?

时间:2013-12-19 08:34:01

标签: php arrays

我有一个数组

数组([0] => 0 [1] => [2] => 3 [3] =>)

我想从中删除空值,结果应该是这样的

数组([0] => 0 [1] => 3) 我不想从数组中删除0值。

6 个答案:

答案 0 :(得分:57)

这样可以解决问题:

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 :(得分:23)

您可以使用array_filter()来删除数组中的空值

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

答案 2 :(得分: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

答案 3 :(得分:2)

你现在处于一个充满烦恼的世界,因为将零从0与虚假区分开来并不容易区分“”。但不要担心,这是可以解决的:

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

这本身很可怕,但似乎有效。

编辑:

这是一个糟糕的建议,因为这个伎俩倾向于一个奇怪的角落:

  • strlen(0)将是strlen(“0”) - &gt; 1,因此是真的
  • strlen(NULL)将是strlen(“”) - &gt; 0,因此为false
  • strlen(“”)将是strlen((“”) - > 0,因此为false 等

你应该这样做的方式是这样的:

 $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"));

这是可读的。

答案 4 :(得分: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);
?>

Out put:

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

答案 5 :(得分:0)

<强>简单地

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