递归删除

朋友给我出的一道题,删除里面含有is_deleted的键值对

{
    "name": "广东汕头华侨中学",
    "is_deleted": 0,
    "children": [
        {
            "name": "实验楼",
            "is_deleted": 0,
            "children": [
                {
                    "name": "实验楼1",
                    "is_deleted": 1,
                    "children": []
                },
                {
                    "name": "黄鹤楼",
                    "is_deleted": 0,
                    "children": [
                        {
                            "name": "实验楼1",
                            "is_deleted": 0,
                            "children": [
                                {
                                    "name": "实验楼11",
                                    "is_deleted": 0,
                                    "children": []
                                },
                                {
                                    "name": "实验楼22",
                                    "is_deleted": 1,
                                    "children": []
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

本来以为是一个挺容易的题目,写起来还是没那么简单,但是也挺有收获了。

<?php
$map = ' {
    "name": "广东汕头华侨中学",
    "is_deleted": 0,
    "children": [
        {
            "name": "实验楼",
            "is_deleted": 0,
            "children": [
                {
                    "name": "实验楼1",
                    "is_deleted": 1,
                    "children": []
                },
                {
                    "name": "黄鹤楼",
                    "is_deleted": 0,
                    "children": [
                        {
                            "name": "实验楼1",
                            "is_deleted": 0,
                            "children": [
                                {
                                    "name": "实验楼11",
                                    "is_deleted": 0,
                                    "children": []
                                },
                                {
                                    "name": "实验楼22",
                                    "is_deleted": 1,
                                    "children": []
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

    ';
    $map = json_decode($map, true);
    if($map['is_deleted'] == 1){
        $map = [];
    }
    if(!empty($map["children"])){
        $map["children"] = del_deleted_arr($map["children"]);
    }
    echo json_encode($map);exit;


    function del_deleted_arr($arr){
        // echo json_encode($arr);exit;
        if($arr){
            for($key=0; $key<count($arr);$key++){
            //foreach ($arr as $key => $value) {
                if($arr[$key]['is_deleted'] == 1){
                     array_splice($arr, $key, 1);
                     $key = $key -1;
                } 
                $arr[$key]['children'] = del_deleted_arr($arr[$key]['children']);
            }
            //$arr = array_values($arr);
            return  $arr;
        }else{
            return [];
        }
    }

All posts

Other pages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注