文档章节

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

wsy940822
 wsy940822
发布于 2017/04/13 17:24
字数 426
阅读 513
收藏 15
点赞 0
评论 2
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);

© 著作权归作者所有

共有 人打赏支持
wsy940822
粉丝 27
博文 63
码字总数 24407
作品 0
浦东
程序员
加载中

评论(2)

wsy940822
wsy940822

引用来自“老张大哥”的评论

总得来说思路就是递归
是的,就是递归的运用
老张大哥
老张大哥
总得来说思路就是递归
php 计算任意多个结构相同的多维数组的每个元素的平均值

最近遇到这样一个计算需求. 有N 个结构相同的数组. 例如 $x = array(0=>array(1,'ab'=>array(1,2),'x'=>5),1=>array(2,'ab'=>array(3,4),'x'=>1),2=>array(3,'ab'=>array(3,4),'x'=>2),...N=......

酒逍遥 ⋅ 2014/01/22 ⋅ 0

PHP之新手自学基础知识(三)——数组篇

数组是什么? 数组是一个能在单个变量中存储多个值的特殊变量。 如果一个项目清单(例如:手机名字的清单),将其存储到单个变量中如下所示: 然而,如果您想要遍历变量并找出特定的一个呢?...

天谴残魂 ⋅ 01/04 ⋅ 0

PHP 数组用法

array() 函数用于创建数组。在 PHP 中,有三种类型的数组: 索引数组 - 带有数字索引的数组 关联数组 - 带有指定的键的数组 多维数组 - 包含一个或多个数组的数组 list(var1,var2...) var1 ...

林夏夕 ⋅ 2016/02/02 ⋅ 0

php对二维数组进行相关操作(排序、转换、去空白等)

php对二维数组进行相关操作(排序、转换、去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对二维数组排序、...

thinkyoung ⋅ 2015/11/09 ⋅ 0

php中遍历多维数组的方法

function arr_foreach ($arr) { if (!is_array ($arr)) { return false; } foreach ($arr as $key => $val ) { if (is_array ($val)) { arr_foreach ($val); } else { $str .= ','.$val; } }......

booleanyong ⋅ 2012/06/28 ⋅ 9

5 分钟掌握 JavaScript 实用窍门

简评:一开始 JavaScript 只是为网页增添一些实时动画效果,现在 JS 已经能做到前后端通吃了,而且还是年度流行语言。本文分享几则 JS 小窍门,可以让你事半功倍 ~ 1. 删除数组尾部元素 一个...

⋅ 06/07 ⋅ 0

php的函数array_change_key_case

php的数组函数 arraychangekey_case可以改变键的大小写 但是只支持一维数组 现在我想支持多维数组 有什么方案啊 递归我无法实现

walden ⋅ 2012/07/09 ⋅ 1

PHP常用数组函数小结

1.requesturi获取到最后的元素indextest1test2test3(一般框架的的路由路径就是这样的) $requesturi ="index\test1\test2\test3";$arr=explode("",$request_uri);$moudle = array_shift($ar......

熊猫88 ⋅ 2016/01/06 ⋅ 0

PHP 数组函数 汇总

1. array_filter 使用回调函数过滤数组中是值。 该函数把输入数组中的每个键值传给回调函数。 如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。 array_...

U_KNOW ⋅ 01/08 ⋅ 0

PHP5中数组函数总结

我不知道PHP初学者是怎么学习函 数的,但是我认为学习他一定是有目的性,它是目的驱动的,以数组函数为例!这么多的数组函数我们该怎么学习?其实我们只需要清楚,我们需要对数组做哪些操 作...

Adam-Lee ⋅ 2011/08/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 21分钟前 ⋅ 0

React Native & Weex 区别

JS引擎 Weex使用V8, React native使用JSCore JS开发框架 ( Js Framework ) Weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。 ReactNative使用...

东东笔记 ⋅ 29分钟前 ⋅ 1

UIkit 分页组件动态加载简单实现

1. 问题描述 使用过UIkit分页组件的都清楚,UIkit的分页不能动态刷新数据,也就是不能在点击下一页的时候,动态从后台加载数据,并且刷新页数以及该页数上的数据,下面是一个简单实现,没有做...

影狼 ⋅ 30分钟前 ⋅ 0

Mobx入门之三:Provider && inject

上一节中<App/>组件传递状态temperatures给children -- <TemperatureInput />,如果组建是一个tree, 那么属性的传递则会非常繁琐。redux使用Provider给子组件提供store, connect将子组件和s...

pengqinmm ⋅ 32分钟前 ⋅ 0

魔兽世界 7.0版本 S23/S24/S25全职业普通+精锐套

  死亡骑士   (联盟)   (部落)   (精锐)   恶魔猎手   (联盟)   (部落)   (精锐)   德鲁伊   (联盟)   (部落)   (精锐)   猎人   (联盟) ...

wangchen1999 ⋅ 39分钟前 ⋅ 0

maven顶级pom和子pom的版本号批量修改

当一个版本发布,新起一个版本时,我们只需要手动修改一下项目中pom.xml的版本号就可以了。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就显得费时费力又繁琐了。还好,m...

ArlenXu ⋅ 48分钟前 ⋅ 0

天气预报接口选择

分为两类收费和免费的 收费的 收费的就不用说了,各种云市场上都有 免费的 免费的最权威的就2个 中国天气网 中国万年历提供的天气API 百度 万年历提供的API有json和xml格式,xml提供的信息更...

SimonAt ⋅ 49分钟前 ⋅ 0

Elasticsearch究竟要设置多少分片数?

0、引言 在构建Elasticsearch集群的初期如果集群分片设置不合理,可能在项目的中后期就会出现性能问题。Elasticsearch是一个非常通用的平台,支持各种各样的用例,并且为数据组织和复制策略提...

tqyin ⋅ 50分钟前 ⋅ 0

php 如何获取指定session_id中的数据

代码如下: $sess_name = session_name(); $sess_id = $_POST[$sessname]; session_id($sess_id);//根据当前session_id=5f0bv0dke3p5tqdcuujtl3kkv7,获取指定session,如果session_id 存在,則......

qimh ⋅ 53分钟前 ⋅ 0

C++使用try,catch在VS2015中捕获异常

下面的代码: #include "stdafx.h"#include <iostream>int main(){try{char* pch;pch = (char*)00001234; //给予一个非法地址 *pch = 6; //对非法地址赋值,会造...

极客行 ⋅ 54分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部