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 session常见问题集锦及解决办法总结
Mar 18 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
PDO实现学生管理系统
Mar 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Python 流程控制实例代码
2009/09/25 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
python Django批量导入不重复数据
2016/03/25 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python if语句知识点用法总结
2018/06/10 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Python内存管理实例分析
2019/07/10 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
python之生成多层json结构的实现
2020/02/27 Python
python如何对链表操作
2020/10/10 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
自动化专业职业生涯规划书范文
2014/01/16 职场文书
旅游文化节策划方案
2014/06/06 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
离职感谢信
2015/01/21 职场文书
幼儿园老师个人总结
2015/02/28 职场文书