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 相关文章推荐
php2html php生成静态页函数
Dec 08 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
php 数组使用详解 推荐
Jun 02 PHP
PHP取进制余数函数代码
Jan 19 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
基于php伪静态的实现方法解析
Jul 31 PHP
PHP实现创建以太坊钱包转账等功能
Apr 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
一个查看session内容的函数
2006/10/09 PHP
PHP 高手之路(二)
2006/10/09 PHP
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
深入分析php之面向对象
2013/05/15 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python列表与元组详解实例
2013/11/01 Python
Python深入06——python的内存管理详解
2016/12/07 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Python短信轰炸的代码
2020/03/25 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
大学生个人事迹材料
2014/01/21 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
培养联系人考察意见
2015/06/01 职场文书
远程教育培训心得体会
2016/01/09 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS