【问题标题】:how to unset empty arrays in php?如何在php中取消设置空数组?
【发布时间】:2012-04-06 16:01:18
【问题描述】:

我有一个数组$mainArray,我想删除/取消设置没有值的键的数组。

这是我的数组:

Array
(
[0] => Array
    (
        [msg_id] => 203
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 
                    )
            )
    )
[1] => Array
    (
        [msg_id] => 202
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 196
                    )
                [1] => Array
                    (
                        [com_id] => 197
                    )
                [2] => Array
                    (
                        [com_id] => 
                    )
            )
    )
[2] => Array
    (
        [msg_id] => 201
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 198
                    )
                [1] => Array
                    (
                        [com_id] => 
                    )
            )
    )
)

在这种情况下,我想查看 comment 数组数组,看看它们中是否有任何空值。如果所有子数组都为空,最好的情况是完全删除 comment 数组。

离开 comment 嘿,只是空

这个数组应该变成:

Array
(
    [0] => Array
        (
            [msg_id] => 203
        )
    [1] => Array
        (
            [msg_id] => 202
            [comment] => Array
                (
                    [0] => Array
                        (
                            [com_id] => 196
                        )
                    [1] => Array
                        (
                            [com_id] => 197
                        )
                )
        )
    [2] => Array
        (
            [msg_id] => 201
        )
)

关于如何进行的任何想法?

谢谢。

【问题讨论】:

    标签: php arrays multidimensional-array unset


    【解决方案1】:

    使用 php 的 unset() 取消设置任何数组键/值。

    更多信息在这个链接http://in3.php.net/unset

    在你的情况下,代码可以,(我没有测试过。但如果你有任何问题,请告诉我,我可以解决它)

    function unsetCommentFromArray($mainArray) {
        foreach($mainArray as $key => $value) {
            foreach($value['comment'] as $k => $v) {
                if(empty($v['com_id'])) {
                    unset($mainArray[$key]['comment'][$k]);
                }
            }   
        }
        return $mainArray;
    }
    

    【讨论】:

      【解决方案2】:
      $array = array_map(function ($i) {
          $i['comment'] = array_filter($i['comment'], function ($c) { return $c['com_id']; });
          return array_filter($i);
      }, $array);
      

      需要 PHP 5.3 或更高版本。

      【讨论】:

        【解决方案3】:

        array_filter() 是您所追求的。特别是递归版本。以下内容来自a comment on the PHP Doc:.

        function array_filter_recursive($array, $callback = null) {
            foreach ($array as $key => & $value) {
                if (is_array($value)) {
                    $value = array_filter_recursive($value, $callback);
                }
                else {
                    if ( ! is_null($callback)) {
                        if ( ! $callback($value)) {
                            unset($array[$key]);
                        }
                    }
                    else {
                        if ( ! (bool) $value) {
                            unset($array[$key]);
                        }
                    }
                }
            }
            unset($value);
        
            return $array;
        }
        

        【讨论】:

          猜你喜欢
          • 2015-06-10
          • 1970-01-01
          • 2019-02-25
          • 2014-02-20
          • 2015-08-18
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 2011-11-02
          相关资源
          最近更新 更多