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环境搭建最新方法
Sep 05 PHP
php 中include()与require()的对比
Oct 09 PHP
php microtime获取浮点的时间戳
Feb 21 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
php中namespace及use用法分析
Dec 06 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
关于laravel 子查询 & join的使用
Oct 16 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实现简单洗牌算法
2013/06/18 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
微信小程序使用npm支持踩坑
2018/11/07 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
python实现博客文章爬虫示例
2014/02/26 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
基于Django用户认证系统详解
2018/02/21 Python
对Python信号处理模块signal详解
2019/01/09 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
软件测试常见笔试题
2012/02/04 面试题
教师的实习自我鉴定
2013/12/17 职场文书
留学生如何写好自荐信
2013/12/27 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
7个关于Python的经典基础案例
2021/11/07 Python