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

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

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


当前回答

foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 

其他回答

如果你正在处理一个数值数组,并且需要在删除空元素后重新索引数组,请使用array_values函数:

array_values(array_filter($array));

另参见:PHP重索引数组?

对于多维数组

$data = array_map('array_filter', $data);
$data = array_filter($data);

我必须这样做,以保持(string) 0的数组值

$url = array_filter($data, function ($value) {
  return (!empty($value) || $value === 0 || $value==='0');
});
foreach($arr as $key => $val){
   if (empty($val)) unset($arr[$key];
}

关于这个话题,最流行的答案是绝对不正确。

考虑下面的PHP脚本:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

为什么会这样?因为包含单个'0'字符的字符串的计算值也是布尔值false,所以即使它不是空字符串,它仍然会被过滤。那将是一个漏洞。

将内置的strlen函数作为过滤函数传递可以工作,因为它对于非空字符串返回一个非零整数,对于空字符串返回一个零整数。非零整型在转换为布尔型时总是求值为真,而零整型在转换为布尔型时总是求值为假。

所以,绝对的、确定的、正确的答案是:

$arr = array_filter($arr, 'strlen');