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

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

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


当前回答

使用array_filter函数删除空值:

$linksArray = array_filter($linksArray);
print_r($linksArray);

其他回答

$out_array = array_filter($input_array, function($item) 
{ 
    return !empty($item['key_of_array_to_check_whether_it_is_empty']); 
}
);
foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 

我认为array_walk更适合这里

$linksArray = array('name', '        ', '  342', '0', 0.0, null, '', false);

array_walk($linksArray, function(&$v, $k) use (&$linksArray){
    $v = trim($v);
    if ($v == '')
        unset($linksArray[$k]);
});
print_r($linksArray);

输出:

Array
(
    [0] => name
    [2] => 342
    [3] => 0
    [4] => 0
)

我们确保即使用户添加了多个空格,空值也会被删除 我们还修剪了有效值中的空格 最后,只有(null), (Boolean False)和(")将被视为空字符串

至于False,可以删除它,因为AFAIK用户不能提交布尔值。

你可以使用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);

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

$array_without_empty_values = array_filter($array);