我想从数组中删除空值。我尝试了array_filter
,array_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)
我如何删除这些空索引?欢迎任何建议。
答案 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);
}