删除空数组元素

新手上路,请多包涵

根据用户提交的内容,我的数组中的某些元素是空字符串。我需要删除这些元素。我有这个:

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

但它不起作用。 $linksArray 仍然有空元素。我也试过用 empty() 函数来做,但结果是一样的。

原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 325
2 个回答

当您处理字符串数组时,您可以简单地使用 array_filter() ,它可以方便地为您处理所有这些:

 print_r(array_filter($linksArray));

请记住, 如果没有提供回调,所有等于 FALSE 的数组条目(请参阅 转换为布尔值)都将被删除。因此,如果您需要保留确切字符串 '0' 的元素,则需要自定义回调:

 // PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

注意:如果您需要在删除空元素后重新索引数组,请使用: $linksArray = array_values(array_filter($linksArray));

原文由 BoltClock 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为 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用户不能提交布尔值。

原文由 Rain 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题