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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
Ajax PHP分页演示
Jan 02 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
基于PHP常用函数的用法详解
May 10 PHP
一个简单且很好用的php分页类
Oct 26 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
tp5递归 无限级分类详解
Oct 18 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 Web木马扫描器代码分享
2015/09/06 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
应聘医学检验人员自荐信
2013/09/27 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
员工手册编写范本
2015/05/14 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
用JS创建一个录屏功能
2021/11/11 Javascript
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
进行数据处理的6个 Python 代码块分享
2022/04/06 Python