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

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

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


当前回答

$linksArray = array_filter($linksArray);

"如果没有提供回调函数,则所有等于FALSE的输入项将被删除。"——http://php.net/manual/en/function.array-filter.php

其他回答

我使用下面的脚本从数组中删除空元素

for ($i=0; $i<$count($Array); $i++)
  {
    if (empty($Array[$i])) unset($Array[$i]);
  }

你可以使用array_filter来删除空元素:

$emptyRemoved = array_filter($linksArray);

如果你的数组中有(int) 0,你可以使用以下方法:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

编辑:也许你的元素本身不是空的,而是包含一个或多个空格…在使用array_filter之前,可以使用以下命令

$trimmedArray = array_map('trim', $linksArray);

投票最多的答案是错误的,或者至少不完全正确,因为OP只谈论空白字符串。下面是详细的解释:

空是什么意思?

首先,我们必须对空的意思达成一致。你的意思是过滤掉:

空字符串("")? 严格错误的值?($element === false) 虚假的价值观?(即0,0.0,"","0",NULL, array()…) PHP的empty()函数?

如何过滤出这些值

只过滤空字符串:

$filtered = array_diff($originalArray, array(""));

为了只过滤出严格的假值,你必须使用回调函数:

$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
    return $var === false;
}

回调对于想要过滤掉“假”值的任何组合也很有用,除了一些。(例如,过滤每个null和false,等等,只留下0):

$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
    return ($var === 0 || $var === '0');
}

第三种情况和第四种情况是相同的(最后为了我们的目的),为此你必须使用默认值:

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

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

$url = array_filter($data, function ($value) {
  return (!empty($value) || $value === 0 || $value==='0');
});