PHP数组去除空白索引值

4
如何修剪 PHP 数组并删除所有空索引。
Array
(
    [0] => 
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] => 4
    [8] => 6
    [9] =>

)

输出应该像这样:
 Array
    (
        [0] => 4
        [1] => 6   
    )
3个回答

9

您正在寻找array_filter函数;-)


例如,下面的代码部分:

$arr = array(null, 0, null, 0, '', null, '', 4, 6, '', );
$arr_filtered = array_filter($arr);
var_dump($arr_filtered);

将会给你以下输出:
array
  7 => int 4
  8 => int 6

请注意,所有“falsy”值都已被删除。
如果您想更具体地指定,可以指定自己的筛选函数。例如,要仅从数组中删除null,我可以使用以下代码:
function my_filter($item) {
    if ($item === null) {
        return false;
    }
    return true;
}

$arr = array(null, 0, null, 0, '', null, '', 4, 6, '', );
$arr_filtered = array_filter($arr, 'my_filter');
var_dump($arr_filtered);

我将得到:

array
  1 => int 0
  3 => int 0
  4 => string '' (length=0)
  6 => string '' (length=0)
  7 => int 4
  8 => int 6
  9 => string '' (length=0)

2
注意:如果没有显式的回调函数,值为0,“0”和NULL也将被过滤。 - LiraNuna
@LiraNuna:我已经编辑了我的答案,并提供了一个例子来说明;感谢您的提醒 :-) - Pascal MARTIN
为了仅删除空值,应该定义回调函数。这就是lambda风格函数适用的地方。array_filter($arr, create_function('$v', 'return $v !== NULL ? TRUE : FALSE')); - mip
array_filter($arr, create_function('$v', 'return $v !== NULL')); 足够了 :) - LiraNuna
是的,您可以使用create_function来实现这一点 - 但我绝对不喜欢create_function:它对性能不利(特别是如果被多次调用),而且很难编写和阅读,因为所有代码都在一个字符串中(这意味着没有语法高亮和转义地狱);相反,我喜欢在PHP 5.3中添加的匿名函数;-) - Pascal MARTIN

2

以下是另一种方法:

<?php

$array = array(
    0 => 0,
    1 => ,
    2 => '',
    3 => 4,
    4 => 6,
    5 => null
);

foreach( $array as $a )
{
    if( !empty($a) AND $a != NULL AND $a != 0 ) // NULL, 0
    {
        $new_array[] = $a;
    }
}

print_r( $new_array );

?>

输出结果将是:
Array
(
    [0] => 4
    [1] => 6
)

在foreach循环中,您不需要检查数组是否为空。当a = 0或a = NULL时,运算符“!=”的结果将是相同的。您绝对应该允许“null”字符串。您可能是一位年轻的开发人员,请继续努力,但请纠正或删除此帖子。 - mip
@doc 首先感谢。是的,我很年轻,但这并不意味着什么。就像他想要的那样,是的,我的第一个版本只检查了null和'',但我认为也许他也想要这个,不需要,他可以像他想要的那样更改if(),这只是一个想法...我的代码是否符合他的要求?是的,它做到了...如果您想要,您可以编辑它 :) - ahmet2106

1

听起来像是作业。

我建议你看一下array_filter函数。那似乎是最合适的选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接