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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
简单的cookie计数器实现源码
Jun 07 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
帝国cms常用标签汇总
2015/07/06 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python3常用内置方法代码实例
2019/11/18 Python
python 实现dict转json并保存文件
2019/12/05 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
个人授权委托书范文
2014/09/21 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
加班费申请报告
2015/05/15 职场文书
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
Python列表的索引与切片
2022/04/07 Python
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android