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 相关文章推荐
1.PHP简介
Oct 09 PHP
一个简洁的多级别论坛
Oct 09 PHP
WINXP下apache+php4+mysql
Nov 25 PHP
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
最基础的vue.js双向绑定操作
2017/08/23 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python 26进制计算实现方法
2015/05/28 Python
Python的语言类型(详解)
2017/06/24 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
python 下载文件的几种方法汇总
2021/01/06 Python
后勤部经理岗位职责
2014/02/23 职场文书
公证委托书模板
2014/04/03 职场文书
债务纠纷委托书
2014/08/30 职场文书
授权委托书
2015/01/28 职场文书
开学典礼致辞
2015/07/29 职场文书
股东出资协议书
2016/03/21 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
详解Spring事件发布与监听机制
2021/06/30 Java/Android