【问题标题】:PHP Array trim blank index valuesPHP数组修剪空白索引值
【发布时间】:2010-03-10 19:50:31
【问题描述】:

如何修剪 PHP 数组并删除所有空索引

Array
(
    [0] => 
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] => 4
    [8] => 6
    [9] =>

)

输出应该是这样的

 Array
    (
        [0] => 4
        [1] => 6   
    )

【问题讨论】:

    标签: php arrays trim


    【解决方案1】:

    您正在寻找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
    

    请注意,所有“虚假”值都已删除。


    如果你想更具体,你可以指定你自己的过滤函数。例如,要从数组中仅删除 nulls,我可以使用这个:

    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)
    

    【讨论】:

    • 注意:如果没有显式回调,0、“0”和 NULL 的值也会被过滤掉。
    • @LiraNuna :我已经编辑了一个示例的答案来说明这一点;感谢您的注意:-)
    • 并且只删除空值应该定义回调函数。这是 lambda 样式函数适合的地方。 array_filter($arr, create_function('$v', 'return $v !== NULL ? TRUE : FALSE'));
    • array_filter($arr, create_function('$v', 'return $v !== NULL')); 够了:)
    • 是的,你可以使用create_function 来做到这一点——但我绝对不喜欢create_function:这对表演不利(特别是如果被多次调用) i>,而且很难写和读,因为所有的代码都在一个字符串中(这意味着没有语法高亮,和一个转义的地狱);;;相反,我喜欢使用 PHP 5.3 中添加的匿名函数 ;-)
    【解决方案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 的情况下,运算符 != 的结果将相同。您绝对应该允许“空”字符串。您可能是年轻的开发者,请继续,但请更正或删除此帖子。
    • @doc 首先感谢。是的,我还年轻,但这并不意味着什么。就像他想要的那样,是的,我的第一个版本只检查了 null 和 '',但我想也许他也想要这个,不需要,他可以改变 if() 就像他想要的那样,这只是一个想法...我的代码做他想做的事吗?是的,它确实...如果你愿意,你可以编辑它:)
    【解决方案3】:

    对我来说听起来像是家庭作业。

    我建议你看看array_filter 函数。这似乎是最合适的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2018-08-26
      • 2017-03-16
      • 1970-01-01
      • 2011-08-11
      • 2010-11-14
      • 2011-05-07
      相关资源
      最近更新 更多