我的数组中的一些元素是基于用户提交的空字符串。我需要移除这些元素。我有这个:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
但这并不奏效。$linksArray仍然有空元素。我也尝试过用empty()函数这样做,但结果是一样的。
我的数组中的一些元素是基于用户提交的空字符串。我需要移除这些元素。我有这个:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
但这并不奏效。$linksArray仍然有空元素。我也尝试过用empty()函数这样做,但结果是一样的。
当前回答
如果你正在处理一个数值数组,并且需要在删除空元素后重新索引数组,请使用array_values函数:
array_values(array_filter($array));
另参见:PHP重索引数组?
其他回答
$linksArray = array_filter($linksArray);
"如果没有提供回调函数,则所有等于FALSE的输入项将被删除。"——http://php.net/manual/en/function.array-filter.php
简而言之:
这是我建议的代码:
$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
另一行代码从数组中删除空(""空字符串)元素。
$array = array_filter($array, function($a) {return $a !== "";});
注意:这段代码故意保留null、0和false元素。
或者你可能想先修剪数组元素:
$array = array_filter($array, function($a) {
return trim($a) !== "";
});
注意:这段代码还删除了null和false元素。
$myarray = array_filter($myarray, 'strlen'); //removes null values but leaves "0"
$myarray = array_filter($myarray); //removes all null values
$a = array(1, '', '', '', 2, '', 3, 4);
$b = array_values(array_filter($a));
print_r($b)