php函数式编程简单示例

本文实例讲述了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字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • php高级编程-函数-郑阿奇

    1.php函数 1.用户自定义函数 复制代码 代码如下: function 函数名字([$parameter,[,-]]) { //函数代码 } 注意:函数名不能与系统函数或用户已经定义的函数重名. $parameter为函数参数,函数一般可以有0个或多个参数, 2.参数的传递 参数是通过值来传递的,例如前面定义func()函数是通过变量$a和$b的值传递的.通过值传递参数不会因为函数内部参数值的变化而改变函数外部的值. 复制代码 代码如下: <?php function color(&$c

  • 谈谈新手如何学习PHP网络编程第1/2页

    文章开头就列举了那么多联系方式,难免会让大家感觉有点AD的意味,但是不容质疑的是,默默的确有那么丁点的表现欲^_^,虽然有时候过于细致会被人说婆妈,但是幸好这种细致对于编程来说,还是蛮有益的! 从默默自己向别人问怎么学PHP开始,到后来不少人又来问默默怎么学PHP,不管默默是新手,还是老鸟,似乎总是感觉摸不出一条清晰的脉络来,不过,默默既然学会了PHP,那么我走的这条路或多或少的有一定借鉴性. PHP的背景恐怕就不用默默赘言了,我相信大家选择一种语言,并不是看它的背景和悠久历史,更重要的是看它的

  • PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】

    本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法.分享给大家供大家参考,具体如下: 实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种: array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=>array('catid'=>'1546','catname'=>'数组排序 一级','co

  • 以实例全面讲解PHP中多进程编程的相关函数的使用

    PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能实现跟c一样的创建子进程.使用exec函数执行程序.处理信号等功能. <?php header('content-type:text/html;charset=utf-8' ); // 必须加载扩展 if (!function_exists("pcntl_fork")) { die("pcntl extention is must !"); } //总进程的数量 $t

  • PHP高级编程实例:编写守护进程

    1.什么是守护进程 守护进程是脱离于终端并且在后台运行的进程.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断. 例如 apache, nginx, mysql 都是守护进程 2.为什么开发守护进程 很多程序以服务形式存在,他没有终端或UI交互,它可能采用其他方式与其他程序交互,如TCP/UDP Socket, UNIX Socket, fifo.程序一旦启动便进入后台,直到满足条件他便开始处理任务. 3.何时采用守护进程开发应用程

  • PHP编程之高级技巧——利用Mysql函数

    尽管PHP为我们提供了很多函数,但有些东西处理起来还是不很方便.譬如PHP提供的日期时间函数就很有限.Mysql为我们提供了不少此类的函数.是否可以利用Mysql函数来处理PHP程序呢?笔者做了以下的尝试. <?php     $data_time="1998-12-31 23:59:59";     $connect_id=mysql_connect('localhost');     $query_id=mysql_query("SELECT DATE_ADD('$

  • php学习笔记之面向对象编程

    复制代码 代码如下: <?phpclass db {     private $mysqli; //数据库连接     private $options; //SQL选项     private $tableName; //表名     public function __construct($tabName) {         $this->tableName = $tabName;         $this->db ();     }     private function d

  • PHP编程函数安全篇

    对于我们想做web安全的人来说,最好就是拿来学习,可是万物抓根源,我们要的不是鱼而是渔.在国内,各种各样的php程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名的cms,论坛,blog程序,很少的人在对那些不出名的程序做安全检测,对于越来越多的php程序员和站长来说,除了依靠服务器的堡垒设置外,php程序本身的安全多少你总得懂点吧. 有人说你们做php安全无非就是搞搞注入和跨站什么什么的,大错特错,如果这样的话,一个magic_quotes_gpc或者服务器里的一些安全

  • PHP编程中的常见漏洞和代码实例

    不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种.在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性. 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型根据上下文环境自动确定.从程序员的角度来看,这无疑是一种极其方便的处理方法.一旦一个变量被创建了,就可以在程序中的任何地方使用.这个特点导致的结果就是程序员很

  • 浅析PHP编程中10个最常见的错误

    目前学习PHP很多朋友,在平时的日常程序开发工程中总会遇到各种各样的问题,本篇经验将为大家介绍PHP开发中10个最常见的问题,希望能够对朋友有所帮助. 错误1:foreach循环后留下悬挂指针 在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法: $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6,

  • PHP 组件化编程技巧

    但其在UI方便却有些力不从心,不仅是PHP,任何一种Web编程语言在设计UI都有类似的问题,宿主语言与HTML混和在一个文件中,大量重复的 HTML代码,毫无任何技术含量,但又非常的费时费力.于是我就希望能够对之前做过的PHP项目UI部分进行总结和归纳,将其封装为一个个小的组件(就像 Delphi中的组件一样),在界面上呈现为统一的风格,日后可以再针对这结组件编写多个CSS文件,提供"换肤"功能. 所有的组件都继承自AbatractComponent这个类,并实现其中的toString

  • PHP编程风格规范分享

    说明:本规范由 EasyChen 借鉴 SINA网络应用开发部<C++开发规范>和互动技术部<PHP4开发规范>,以及phpDocument规范 整理出的开发规范.我觉得非常不错, 适合PHP的开发,给大家参考,养成一个良好的编程风格是非常有必要的. 第1章 命名规范 1.1变量 1.1.1全局变量 全局变量使用$g_开头,如$g_data_list. 1.1.2 一般变量 一般的变量使用小写字母命名,单词之间使用下划线分隔. 变量名字应该使用名词或者形容词+名词的方式.如$val

随机推荐