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 相关文章推荐
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
一个实用的php验证码类
Jul 06 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP 实现缩略图
Mar 09 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
DSP接收机前端设想
2021/03/02 无线电
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP的分页功能
2007/03/21 PHP
PHP生成条形图的方法
2014/12/10 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
Python3+Appium安装使用教程
2019/07/05 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
可贵的沉默教学反思
2014/02/06 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
2016年元旦致辞
2015/08/01 职场文书
大学生党课感想
2015/08/11 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers