我的数组中的一些元素是基于用户提交的空字符串。我需要移除这些元素。我有这个:
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()函数这样做,但结果是一样的。
当前回答
$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");
foreach ($my as $key => $value) {
if (is_null($value)) unset($my[$key]);
}
foreach ($my as $key => $value) {
echo $key . ':' . $value . '<br>';
}
输出
1:5 2:6
其他回答
只是想为循环提供一个替代方案…还解决了密钥的差距……
在我的例子中,我希望在操作完成时保留顺序数组键(而不仅仅是我所关注的奇数)。对我来说,将代码设置为只寻找奇数键似乎很脆弱,而且不适合将来使用。)
我一直在寻找类似这样的东西:http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
array_filter和array_slice的组合可以达到目的。
$example = array_filter($example);
$example = array_slice($example,0);
不知道效率或基准,但它是有效的。
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
foreach($arr as $key => $val){
if (empty($val)) unset($arr[$key];
}
投票最多的答案是错误的,或者至少不完全正确,因为OP只谈论空白字符串。下面是详细的解释:
空是什么意思?
首先,我们必须对空的意思达成一致。你的意思是过滤掉:
空字符串("")? 严格错误的值?($element === false) 虚假的价值观?(即0,0.0,"","0",NULL, array()…) PHP的empty()函数?
如何过滤出这些值
只过滤空字符串:
$filtered = array_diff($originalArray, array(""));
为了只过滤出严格的假值,你必须使用回调函数:
$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
return $var === false;
}
回调对于想要过滤掉“假”值的任何组合也很有用,除了一些。(例如,过滤每个null和false,等等,只留下0):
$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
return ($var === 0 || $var === '0');
}
第三种情况和第四种情况是相同的(最后为了我们的目的),为此你必须使用默认值:
$filtered = array_filter($originalArray);