在PHP中从数组中删除空值

时间:2014-07-20 21:21:34

标签: php

我想从数组中删除空值。我尝试了array_filterarray_diff和自定义编码功能,但没有任何帮助。

这是我生成数组的代码:

for($i=0;$i<$_POST['size'];$i++)
{
    $e = array();
    if(!@strcasecmp("yes", $_POST['email'.$i]))
    {
        //array_push($e, $_POST['u'.$i]);
        $e[$i] = $_POST['u'.$i];
    }
    else
    {
        $e[$i] = "";
    }
    //var_dump($e);

var_dump($e);
}

我的var_dump输出:

array (size=1)
  0 => string '12' (length=2)
string '12' (length=2)
array (size=1)
  1 => string '13' (length=2)
string '13' (length=2)
array (size=1)
  2 => string '' (length=0)
string '' (length=0)
array (size=1)
  3 => string '' (length=0)
string '' (length=0)
array (size=1)
  4 => string '' (length=0)
string '' (length=0)
array (size=1)
  5 => string '' (length=0)

我如何删除这些空索引?欢迎任何建议。

3 个答案:

答案 0 :(得分:1)

您要删除的元素不是null,它们是空字符串。您仍然可以使用array_filter,如下所示

$filtered_array = array_filter($e, 'strlen');

我们使用strlen作为回调函数,因为空字符串返回0并在PHP中被评估为false。 实际上,以下内容也适用于@revo指出:

$filtered_array = array_filter($e);

答案 1 :(得分:1)

您可以使用name="email[]"从POST获取索引数组,因此您可以将'size'foreach放在数组上。移动$e的初始化,因为您每次迭代都会重置它。

if (isset($_POST['email']) && is_array($_POST['email'])) {
    $e = array();

    foreach ($_POST['email'] as $email) {
        if (trim($email)) {
            $e[] = $email;
        }
    }

    var_dump($e);
}

..如果您真的想要使用'size'for保留更糟糕的方法,请删除is_array检查并替换为您自己的循环结构,但保留内部检查并移动从您的for循环中初始化$ e。

答案 2 :(得分:0)

其他条件有什么意义?简单地省略它:

for($i=0;$i<$_POST['size'];$i++)
{
    $e = array();
    if(!@strcasecmp("yes", $_POST['email'.$i]))
    {
        //array_push($e, $_POST['u'.$i]);
        $e[] = $_POST['u'.$i];
    }

var_dump($e);
}