>  기사  >  백엔드 개발  >  PHP는 다차원 배열에서 값의 재귀 삭제를 구현합니다.

PHP는 다차원 배열에서 값의 재귀 삭제를 구현합니다.

墨辰丷
墨辰丷원래의
2018-05-23 17:20:121622검색

这篇文章主要介绍了PHP递归删除多维数组中的某个值,需要的朋友可以参考下

今天在做业务逻辑的过程中,需要在一个不确定的多维数组中删除某个特定的key,查了挺长时间加上自己的修改,终于满足了业务逻辑,该方法在修改后应该可以适用于很多地方,所以记录下来以备后用,我这里是一个多维数组,还是json_encode后的,主要目的是删除所有old_tags_id数组中有tag_id=264的数据,顺便要删除相应的tag_name,还有 addtag要减1,,代码如下:

先放递归函数,当然这里是核心,很多人看了这个应该就已经知道如何使用了.

public function dealMenuTagDelete(&$menuData, $tag_id)
  {
    if (!is_array($menuData)) {
      return false;
    }
    foreach ($menuData as $key => $val) {
      if ($key === 'old_tags_id') {
        foreach ($val as $tagKey => $tagVaule) {
          if ($tagVaule == $tag_id) {
            unset($menuData['old_tags_id'][$tagKey]);
            unset($menuData['old_tags'][$tagKey]);
            $menuData['addtag']--;
          }
        }
      }
      if (is_array($val)) {
        self::dealMenuTagDelete($menuData[$key], $tag_id);
      }
    }
    return $menuData;
  }

维数组长这样,还是jeson_encode后的格式:

[  {
    "typ": "res_ejcd",
    "tit": "message1",
    "data": "1@2@3",
    "subdata": {
      "zizicd1": {
        "typ": "res_wb",
        "data": "qqqq",
        "addtag": 1,
        "old_tags": [
          "\"campaign综合分析\"",
          "test add a tag"
        ],
        "old_tags_id": [
          "264",
          "17"
        ],
        "new_tags_id": [],
        "tit": "1"
      },
      "zizicd2": {
        "typ": "res_wb",
        "data": "wwww",
        "addtag": 1,
        "old_tags": [
          "test add a tag"
        ],
        "old_tags_id": [
          "17"
        ],
        "new_tags_id": [],
        "tit": "2"
      },
      "zizicd3": {
        "typ": "res_wb",
        "data": "ddd",
        "addtag": 1,
        "old_tags": [],
        "old_tags_id": [],
        "new_tags_id": [
          "new_tag1"
        ],
        "tit": "3"
      }
    },
    "addtag": 0,
    "old_tags": [],
    "old_tags_id": [],
    "new_tags_id": []
  },
  {
    "typ": "res_tw",
    "tit": "Post",
    "data": "2121",
    "subdata": null,
    "addtag": 1,
    "old_tags": [
      "“519引号阅读user message图文”"
    ],
    "old_tags_id": [
      "183"
    ],
    "new_tags_id": []
  },
  {
    "typ": "res_wb",
    "tit": "Today1",
    "data": "12312321",
    "subdata": null,
    "addtag": 1,
    "old_tags": [],
    "old_tags_id": [],
    "dynamicdata": "{\"default\":{\"message_type\":\"1\",\"val\":\"dynamic\"},\"segementation\":[{\"segId\":\"451\",\"message_type\":\"1\",\"val\":\"你属于conversation 80这一组\"},{\"segId\":\"450\",\"message_type\":\"1\",\"val\":\"poll-1212\\n有三个人,rainbow H T_T\"}]}",
    "configId": "2392",
    "new_tags_id": [
      "new_tag2"
    ]
  }
]

然后赋值,调用

$tag_id = 264;
$menuData = json_decode($data,true);//这里第二个参数用true就会转化为数组了
self::dealMenuTagDelete($menuData,$tag_id);
print_r($menuData);

以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面_php技巧

php获取文件后缀的9种方法_php技巧

PHP实现补齐关闭的HTML标签_php技巧

위 내용은 PHP는 다차원 배열에서 값의 재귀 삭제를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.