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 相关文章推荐
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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强制运行广告的方法
2014/12/01 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
python zip文件 压缩
2008/12/24 Python
Python实现简单状态框架的方法
2015/03/19 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
python中取绝对值简单方法总结
2020/07/24 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
软件测试题目
2013/02/27 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
大学生演讲稿范文
2014/01/11 职场文书
中年人生感言
2014/02/04 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
公司员工活动策划方案
2014/08/20 职场文书
教师个人师德总结
2015/02/06 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
公司保洁员管理制度
2015/08/04 职场文书