php函数式编程简单示例


Posted in PHP onAugust 08, 2019

本文实例讲述了php函数式编程。分享给大家供大家参考,具体如下:

// 函数式编程
$users = array(
  array('id' => 1, 'name' => 'abc1', 'age' => 29, '性别' => '男'),
  array('id' => 2, 'name' => 'abc2', 'age' => 21, '性别' => '女'),
  array('id' => 3, 'name' => 'abc3', 'age' => 23, '性别' => '男'),
  array('id' => 4, 'name' => 'abc4', 'age' => 25, '性别' => '女'),
  array('id' => 5, 'name' => 'abc5', 'age' => 20, '性别' => '女'),
  array('id' => 6, 'name' => 'abc6', 'age' => 24, '性别' => '男'),
  array('id' => 7, 'name' => 'abc7', 'age' => 28, '性别' => '女'),
  array('id' => 8, 'name' => 'abc8', 'age' => 27, '性别' => '男'),
);
//获取性别为女的用户
$arrayFilter = array_filter($users, function($item){
  return $item['性别'] == '女' ;
});
// 不影响原数组,返回一个新数组
$arrayMap = array_map(function($item){
  return array(
    'id' => $item['id'],
    'name' => $item['name'],
    'age' => $item['age'],
    'gender' => $item['性别'] == '男' ? 'male' : 'female',
  );
}, $users);
// 修改原数组,对年龄+10处理,同时新增索引gender,返回值 1 或 0
array_walk($users, function(&$item, $index){
  $item['gender'] = $item['性别'] == '男' ? 'male' : 'female';
  if ($index % 2 == 0) {
    $item['age'] += 10;
  }
});
//array_reduce(array $input , callable $function [,$initial = NULL ]) 用回调函数迭代地将数组简化为单一的值
// 求最大年龄的用户,返回最大年龄用户信息
$arrayReduce = array_reduce($users, function($init, $val){
  return $init['age'] > $val['age'] ? $init : $val;
}, array('age' => 0));
// 求平均年龄
$avgAge = array_reduce($users, function($init, $item){
  return $init + $item['age'];
}, 0) / count($users);
/*
 * array_reduce 的内部实现方式
function array_reduce($data, $callback, $initial) {
  foreach ($data as $index => $val) {
    $initial = $callback($initial, $val);
  }
  return $initial;
}
*/
//用array_map和array_mutisort来排序 
//利用array_map获取要依据排序的数组,(匿名函数 create_function($args, return $val))
//$arrField = array_map(create_function('$item', 'return $item["age"];'), $users); 【不推荐】
$arrField = array_map(function($item){
  return $item['age'];
}, $users);
//利用array_mutisort来进行年龄从大到小排序
$arrSort = array_multisort($arrField, SORT_DESC, $users);
//闭包实现计数器
function counts() {
  $a = 1;
  // 闭包,引用变量$a
  return function() use(&$a) {
    return $a++;
  };
}
$countFunc = counts();
echo $countFunc(); // 1
echo $countFunc(); // 2
echo $countFunc(); // 3
echo $countFunc(); // 4

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
怎样在UNIX系统下安装php3
Oct 09 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
Zend Framework教程之Zend_Config_Xml用法分析
Mar 23 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
因str_replace导致的注入问题总结
Aug 08 #PHP
PHP goto语句用法实例
Aug 06 #PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 #PHP
Yii框架核心组件类实例详解
Aug 06 #PHP
PHP使用Session实现上传进度功能详解
Aug 06 #PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 #PHP
PHP中的自动加载操作实现方法详解
Aug 06 #PHP
You might like
php中文本操作的类
2007/03/17 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php命令行用法入门实例教程
2014/10/27 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
详解webpack自定义loader初探
2018/08/29 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
Django 解决由save方法引发的错误
2020/05/21 Python
临床医学系毕业生推荐信
2013/11/09 职场文书
小学生读书感言
2014/02/12 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
《灰雀》教学反思
2016/02/19 职场文书
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL