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 相关文章推荐
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
PHP通过API获取手机号码归属地
May 28 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
Yii实现简单分页的方法
Apr 29 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
php格式化时间戳
Dec 17 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP dirname功能及原理实例解析
Oct 28 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初学者(入门学习经验谈)
2010/10/12 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
YII中assets的使用示例
2014/07/31 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
深入研究React中setState源码
2017/11/17 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
教师评语大全
2014/04/28 职场文书
骨干教师培训方案
2014/05/06 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书