无法从数组中删除空元素

时间:2011-04-08 18:58:41

标签: php arrays

我想从数组中删除空元素。我有一个$ _POST-String,它由explode()设置为一个数组。然后我使用循环来删除空元素。但这不起作用。我也尝试过array_filter(),但没有成功。你能帮助我吗?请参阅以下代码:

$cluster = explode("\n", $_POST[$nr]);

     print_r ($cluster);
     echo "<br>";

  for ($i=0 ; $i<=count($cluster);$i++) 
    {
      if ($cluster[$i] == '') 
       {
         unset ( $cluster[$i] );
       }
    }

     print_r ($cluster);
     echo "<br>";

结果:

Array ( [0] => Titel1 [1] => Titel2 [2] => Titel3 [3] => [4] => [5] => )

Array ( [0] => Titel1 [1] => Titel2 [2] => Titel3 [3] => [4] => ) 

3 个答案:

答案 0 :(得分:4)

可以使用array_filter轻松删除空元素:

$array = array_filter($array);

示例:

$array = array('item_1' => 'hello', 'item_2' => '', 'item_3' => 'world', 'item_4' => '');
$array = array_filter($array);
/*
Array
(
    [item_1] => hello
    [item_3] => world
)
*/

答案 1 :(得分:1)

如果你改变了怎么办?

for ($i=0 ; $i<=count($cluster);$i++) { if ($cluster[$i] == '') { unset ( $cluster[$i] ); } }

for ($i=0 ; $i<=count($cluster);$i++) { if (trim($cluster[$i]) == '') { unset ( $cluster[$i] ); } }

答案 2 :(得分:1)

问题在于每次运行都会评估for循环条件。

这意味着每次数组收缩时都会多次调用count(...)

正确的方法是:

$test = explode("/","this/is/example///");
print_r($test);
$arrayElements = count($test);
for($i=0;$i<$arrayElements;$i++)
    if(empty($test[$i])
        unset($test[$i]);

print_r($test);

没有额外变量的另一种方法是向后计数:

$test = explode("/","this/is/example///");
print_r($test);
for($i=count($test)-1;$i>=0;$i--)
    if(empty($test[$i])
        unset($test[$i]);

print_r($test);