这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 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 递归删除多维数组中的某个值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0808/340161.html