php教程

超轻量级php框架startmvc

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

更新时间:2020-03-19 04:58:27 作者:startmvc
今天在做业务逻辑的过程中,需要在一个不确定的多维数组中删除某个特定的key,查了挺长

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

php 多维数组 php 递归删除