自定义 array_map() 对应的递归函数 array_map_recursive()
array_walk 有个原生递归函数 array_walk_recursive($arr, 'function', 'words'),但是 array_map 却没有对应的递归函数 array_map_recursive,我们可以自定义一个:
function array_map_recursive($filter, $data)
{
$result = array();
foreach ($data as $key => $val)
{
$result[$key] = is_array($val)
? array_map_recursive($filter, $val)
: call_user_func($filter, $val);
} return $result;
}
应用举例:
$arr = array(
'a' => '2',
'b' => array(
'cc' => 'wen',
'dd' => 'jian',
'ee' => 'bao'
)
); function func_a($value)
{
$value .= '_AAA';
return $value;
} var_dump($arr); $arr = array_map_recursive('func_a', $arr); var_dump($arr);
其实吧,完全可以用 array_walk_recursive() 函数 实现该功能,如下代码所示:
$arr = array(
'a' => '2',
'b' => array(
'cc' => 'wen',
'dd' => 'jian',
'ee' => 'bao'
)
); function func_b(&$value)
{
$value .= '_AAA';
} var_dump($arr); array_walk_recursive($arr, 'func_b'); var_dump($arr);
输出:
array(2) {
["a"]=>
string(1) "2"
["b"]=>
array(3) {
["cc"]=>
string(3) "wen"
["dd"]=>
string(4) "jian"
["ee"]=>
string(3) "bao"
}
}
array(2) {
["a"]=>
string(5) "2_AAA"
["b"]=>
array(3) {
["cc"]=>
string(7) "wen_AAA"
["dd"]=>
string(8) "jian_AAA"
["ee"]=>
string(7) "bao_AAA"
}
}
延伸阅读:
自定义 array_map() 对应的递归函数 array_map_recursive()的更多相关文章
- PHP笔记(PHP初级篇)
学习完HTML和CSS后,终于要开始学习PHP啦!前面的铺垫只为后路的畅顺! PHP环境搭建: 企业中常用到的环境是:Linux+Apache+MySQL+PHP 学习环境是:Windows+Apac ...
- PHP初级篇
PHP初级篇 PHP环境搭建: 企业中常用到的环境是:Linux+Apache+MySQL+PHP 学习环境是:Windows+Apache+MySQL+PHP 工具 Apache 2.4.4 MyS ...
- 20145221 《Java程序设计》第三周学习总结
20145221 <Java程序设计>第三周学习总结 教材学习内容总结 第四章部分已在假期完成,详见博客: <Java程序设计>第四章-认识对象 第五章部分 何谓封装 封装实际 ...
- Go入门教程
本人录制的Go入门视频 20小时快速入门go语言视频:https://pan.baidu.com/s/1jJPsThk 基础编程 01.Go语言介绍02.环境搭建03.第一个Go程序 04.命名.变量 ...
- 浏览器事件环(EventLoop)
1. 基础知识 1. js语言特点 1. js语言是单线程语言,主线程是单线程.如UI渲染,脚本加载是主线程任务. 2. js语言采用事件循环(EventLoop)机制. 2. 同步任务: 不被引擎挂 ...
- sql递归函数(自定义函数递归查找) 能返回递归的层次
实现效果图如下: 创建表: create table t_tree ( id int IDENTITY(1,1), parentid int, name varchar(10) ) go 插入测试数据 ...
- PHP数组函数: array_map()
定义和用法 array_map() 函数返回用户自定义函数作用后的数组.回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致. 语法 array_map(function,a ...
- 巧用array_map()和array_reduce()替代foreach循环
1.array_reduce( $arr , callable $callback ) 使用回调函数迭代地将数组简化为单一的值. 其中$arr 为输入数组,$callback($result , $v ...
- php rmdir使用递归函数删除非空目录
我们大家都知道,php rmdir()函数用于删除空目录,但如果要删除非空目录,我们必须将非空目录中的文件或子目录删除,本文章向大家介绍php如何使用递归函数删除非空目录,需要的朋友可以参考一下.首先 ...
随机推荐
- WPF MVVM实现TreeView
今天有点时间,做个小例子WPF MVVM 实现TreeView 只是一个思路大家可以自由扩展 文章最后给出了源码下载地址 图1 图2 模版加上了一个checkbox,选中父类的checkb ...
- 怎样写 OpenStack Neutron 的 Plugin (二)
其实上一篇博文中的内容已经涵盖了大部分写Neutron插件的技术问题,这里主要还遗留了一些有关插件的具体实现的问题. 首先,Neutron对最基本的三个资源:Network, Port 和 Subne ...
- SQL 内置排名函数 DENSE_RANK
求排名前五的数据信息: 实现一: select distinct top 5 Id,Title,sort from content order by sort DESC 实现二: select * f ...
- [bzoj 1004][HNOI 2008]Cards(Burnside引理+DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 分析: 1.确定方向:肯定是组合数学问题,不是Polya就是Burnside,然后题目上 ...
- Linq之Expression初见
目录 写在前面 系列文章 Expression 表达式树创建方式 一个例子 总结 写在前面 上篇文章介绍了扩展方法,这篇文章开始将陆续介绍在linq中使用最多的表达式树的相关概念,以概念及例子一一列出 ...
- 第九课:js的类与继承
因为本书是js的框架设计,因此观看本书的必须有js基础,看不懂,请不要觉得自己差.我也是看了5遍js高级程序设计,才能看懂这本书的. 有关js的构造函数,继承的方法大家可以去看js的高级程序设计,我这 ...
- WCF安装Windows服务
安装图解: 安装命令: 1. 开始 ->运行 ->cmd2. cd到C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319(Framework版本号按I ...
- javascript 漏洞
1.javascript语言中,每一个对象都有一个对应的原型对象,称为prototype对象. 继承是基于原型的! 2.prototype对象的作用,就是定义所有实例对象共享的属性和方法! 3.“原 ...
- reboot-css
dd, label { margin-bottom: .5rem; }abbr[title] { text-decoration: none; }abbr[title] { border-bottom ...
- JS_工厂模式
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...