我的数组中的一些元素是基于用户提交的空字符串。我需要移除这些元素。我有这个:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

但这并不奏效。$linksArray仍然有空元素。我也尝试过用empty()函数这样做,但结果是一样的。


当前回答

只有一句话: 更新(感谢@suther):

$array_without_empty_values = array_filter($array);

其他回答

$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");   

foreach ($my as $key => $value) {
    if (is_null($value)) unset($my[$key]);
}

foreach ($my as $key => $value) {
    echo   $key . ':' . $value . '<br>';
} 

输出

1:5 2:6

你可以这样做

array_filter($array)

array_filter: "如果没有提供回调函数,则所有等于FALSE的输入项都将被删除。"这意味着具有NULL, 0, '0', ", FALSE, array()值的元素也将被删除。

另一个选择是行动

array_diff($array, array(''))

它将删除值为NULL,”和FALSE的元素。

希望这对你有所帮助。

更新

这里有一个例子。

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

总结如下:

0或'0'将删除0和'0' NULL, FALSE或"将删除NULL, FALSE和"

只是想为循环提供一个替代方案…还解决了密钥的差距……

在我的例子中,我希望在操作完成时保留顺序数组键(而不仅仅是我所关注的奇数)。对我来说,将代码设置为只寻找奇数键似乎很脆弱,而且不适合将来使用。)

我一直在寻找类似这样的东西:http://gotofritz.net/blog/howto/removing-empty-array-elements-php/

array_filter和array_slice的组合可以达到目的。

$example = array_filter($example);
$example = array_slice($example,0);

不知道效率或基准,但它是有效的。

    $myarray = array_filter($myarray, 'strlen');  //removes null values but leaves "0"
    $myarray = array_filter($myarray);            //removes all null values
foreach($arr as $key => $val){
   if (empty($val)) unset($arr[$key];
}