前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php 多维数组去空值字段/多维数组改键名称

php 多维数组去空值字段/多维数组改键名称

作者头像
友儿
发布2022-09-11 15:04:12
3K0
发布2022-09-11 15:04:12
举报
文章被收录于专栏:友儿

我有这样一个需求,下面我以json格式展示便于查看结构。我需要删除多维数组中的空字段/指定字段,并且修改某些字段的键名称。

代码语言:javascript
复制
[
    {
        "_id":1,
        "name":"笔记本整机",
        "tag":"",
        "list":[
            {
                "_id":19,
                "name":"笔记本",
                "tag":"",
                "list":[
                    {
                        "_id":75,
                        "name":"笔记本电脑",
                        "tag":"notebook",
                        "list":[

                        ]
                    },
                    {
                        "_id":86,
                        "name":"电脑锁",
                        "tag":"notebook_lock",
                        "list":[

                        ]
                    }
                ]
            },
            {
                "_id":20,
                "name":"平板产品",
                "tag":"",
                "list":[
                    {
                        "_id":87,
                        "name":"平板电脑",
                        "tag":"tablepc",
                        "list":[

                        ]
                    },   
                    {
                        "_id":94,
                        "name":"其它配件",
                        "tag":"other_accessories",
                        "list":[

                        ]
                    }
                ]
            }
        ]
    },
    {
        "_id":2,
        "name":"手机",
        "tag":"",
        "list":[
            {
                "_id":22,
                "name":"手机",
                "tag":"",
                "list":[
                    {
                        "_id":105,
                        "name":"手机",
                        "tag":"cell_phone",
                        "list":[

                        ]
                    },      
                    {
                        "_id":115,
                        "name":"号卡专区",
                        "tag":"haoka",
                        "list":[

                        ]
                    }
                ]
            },
            {
                "_id":23,
                "name":"通讯产品",
                "tag":"",
                "list":[
                    {
                        "_id":116,
                        "name":"集团电话",
                        "tag":"groupphone",
                        "list":[

                        ]
                    },
                    {
                        "_id":124,
                        "name":"呼叫器",
                        "tag":"beeper",
                        "list":[

                        ]
                    }
                ]
            }
        ]
    }
]

需求:

  • 删除多维数组中taglist键值为空的
  • 修改_id键为id键、修改list键为child

正确格式如下json

代码语言:javascript
复制
[
    {
        "id":1,
        "name":"笔记本整机",        
        "child":[
            {
                "id":19,
                "name":"笔记本",                
                "child":[
                    {
                        "id":75,
                        "name":"笔记本电脑"                     
                    },
                    {
                        "id":86,
                        "name":"电脑锁"                    
                    }
                ]
            },
            {
                "id":20,
                "name":"平板产品",                
                "child":[
                    {
                        "id":87,
                        "name":"平板电脑"                   
                    },   
                    {
                        "id":94,
                        "name":"其它配件"                  
                    }
                ]
            }
        ]
    },
    {
        "id":2,
        "name":"手机",
        "child":[
            {
                "id":22,
                "name":"手机",  
                "child":[
                    {
                        "id":105,
                        "name":"手机" 
                    },      
                    {
                        "id":115,
                        "name":"号卡专区"
                    }
                ]
            },
            {
                "id":23,
                "name":"通讯产品",
                "child":[
                    {
                        "id":116,
                        "name":"集团电话"
                    },
                    {
                        "id":124,
                        "name":"呼叫器"
                    }
                ]
            }
        ]
    }
]

php代码如下

代码语言:javascript
复制
<?php
     /**
     * @param array $arr 原数组
     *
     * 修改前的_id键对应修改后的id,修改前的list键对应修改后的child
     *
     * @param array $editKey =>['_id' => 'id', 'list' => 'child']
     *
     * tag 键为true时,全部删除,list 键为false时,仅仅删除为空的数组或者字段
     * @param array $delKey  =>['tag' => true, 'list' => false]
     *
     * @return array
     */
    function array_filter_recursive(array &$arr, array $editKey, array $delKey)
    {
        if (count($arr) < 1) {
            return [];
        }
        foreach ($arr as $k => $v) {
            if (is_array($v)) {
                $arr[$k] = $this->array_filter_recursive($v, $editKey, $delKey);
            }
            $key = '';
            if (in_array($k, array_keys($editKey), true)) {//要修改的key
                $arr[$editKey[$k]] = $arr[$k];
                $key = $editKey[$k];
                unset($arr[$k]);
            }
            //要删除的key
            if (in_array($k, array_keys($delKey), true)) {
                if (!$delKey[$k] && (is_null($arr[$key]) || empty($arr[$key])) && $key) {//只删除为空的
                    unset($arr[$key]);
                } else {
                    if ($delKey[$k]) {//全删除
                        unset($arr[$k]);
                    }
                }
            }
        }
        return $arr;
    }
?>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我有这样一个需求,下面我以json格式展示便于查看结构。我需要删除多维数组中的空字段/指定字段,并且修改某些字段的键名称。
  • 需求:
  • 正确格式如下json
  • php代码如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档