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安装为Apache DSO
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
PHP无限分类的类
Jan 02 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
PHP目录操作实例总结
Sep 27 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 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中与数组相关的函数
2007/03/22 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
php递归函数怎么用才有效
2018/02/24 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python django事务transaction源码分析详解
2017/03/17 Python
python对csv文件追加写入列的方法
2019/08/01 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
护理专业毕业生推荐信
2013/10/31 职场文书
年终总结会议主持词
2014/03/17 职场文书
文艺演出策划方案
2014/06/07 职场文书
公司慰问信范文
2015/03/23 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
女性健康讲座主持词
2015/07/04 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Java集成swagger文档组件
2021/06/28 Java/Android