协慌网

登录 贡献 社区

删除空数组元素

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

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

但这是行不通的。 $linksArray仍然具有空元素。我也尝试过使用empty()函数,但是结果是一样的。

答案

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

print_r(array_filter($linksArray));

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

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

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

您可以使用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之前可以使用以下array_filter

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

关于此主题的最流行答案是绝对不正确。

考虑以下 PHP 脚本:

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

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

将内置的 strlen 函数用作过滤函数将起作用,因为它为非空字符串返回一个非零整数,为空字符串返回一个零整数。非零整数在转换为布尔值时始终求值为 true,而零整数在转换为布尔值时始终求值为 false。

因此,绝对,确定,正确的答案是:

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