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应用程序来获取Web服务器的状态信息
Oct 09 PHP
用PHP连接Oracle for NT 远程数据库
Oct 09 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
功能强大的php分页函数
Jul 20 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 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基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
django之session与分页(实例讲解)
2017/11/13 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
教育专业个人求职信
2013/12/02 职场文书
好邻里事迹材料
2014/01/16 职场文书
三年级语文教学反思
2014/02/01 职场文书
大学军训感言400字
2014/03/11 职场文书
创先争优承诺书范文
2014/03/31 职场文书
创先争优一句话承诺
2014/05/29 职场文书
学生上课说话检讨书
2014/10/25 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
党小组鉴定意见
2015/06/02 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android