我想从数组中删除空元素。我有一个$ _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] => )
答案 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);