朋友给我出的一道题,删除里面含有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 [];
}
}