PHP递归删除多维数组中的某个值

2018-10-15 17:24

阅读:394

今天在做业务逻辑的过程中,需要在一个不确定的多维数组中删除某个特定的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: “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递归删除多维数组中的某个值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


评论


亲,登录后才可以留言!