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

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

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


当前回答

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

array_values(array_filter($array));

另参见:PHP重索引数组?

其他回答

$a = array(1, '', '', '', 2, '', 3, 4);
$b = array_values(array_filter($a));

print_r($b)

当你处理一个字符串数组时,你可以简单地使用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));

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

for ($i=0; $i<$count($Array); $i++)
  {
    if (empty($Array[$i])) unset($Array[$i]);
  }
foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 

简而言之:

这是我建议的代码:

$myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));

解释:

我认为使用array_filter是好的,但还不够,因为值就像空格和\n,…保持在数组中,这通常是不好的。

所以我建议你使用混合‍‍array_filter和array_map。

Array_map用于修整,array_filter用于删除空值,strlen用于保留0值,array_values用于重新索引(如果需要的话)。

样品:

$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");

// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);

// "a"
$new2 = array_filter(array_map('trim', $myarray));

// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');

// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

var_dump($new1, $new2, $new3, $new4);

结果:

array(5) {
  [0]=>
" string(1) "
  [1]=>
  string(1) "
"
  [2]=>
  string(2) "
"
  [4]=>
  string(1) " "
  [6]=>
  string(1) "a"
}
array(1) {
  [6]=>
  string(1) "a"
}
array(2) {
  [5]=>
  string(1) "0"
  [6]=>
  string(1) "a"
}
array(2) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "a"
}

在线测试:

http://sandbox.onlinephpfunctions.com/code/e02f5d8795938be9f0fa6f4c17245a9bf8777404