当前位置:首页 > PHP教程 > php函数 > 列表

php函数式编程简单示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-09 15:45:46 浏览: 评论:0 

这篇文章主要介绍了php函数式编程,结合简单实例形式分析了php函数式编程相关实现方法及数组排序、闭包操作使用技巧,需要的朋友可以参考下。

本文实例讲述了php函数式编程,分享给大家供大家参考,具体如下:

  1. // 函数式编程 
  2. $users = array
  3.   array('id' => 1, 'name' => 'abc1''age' => 29, '性别' => '男'), 
  4.   array('id' => 2, 'name' => 'abc2''age' => 21, '性别' => '女'), 
  5.   array('id' => 3, 'name' => 'abc3''age' => 23, '性别' => '男'), 
  6.   array('id' => 4, 'name' => 'abc4''age' => 25, '性别' => '女'), 
  7.   array('id' => 5, 'name' => 'abc5''age' => 20, '性别' => '女'), 
  8.   array('id' => 6, 'name' => 'abc6''age' => 24, '性别' => '男'), 
  9.   array('id' => 7, 'name' => 'abc7''age' => 28, '性别' => '女'), 
  10.   array('id' => 8, 'name' => 'abc8''age' => 27, '性别' => '男'), 
  11. ); 
  12. //获取性别为女的用户 
  13. $arrayFilter = array_filter($usersfunction($item){ 
  14.   return $item['性别'] == '女' ; 
  15. }); 
  16. // 不影响原数组,返回一个新数组 
  17. $arrayMap = array_map(function($item){ 
  18.   return array
  19.     'id' => $item['id'], 
  20.     'name' => $item['name'], 
  21.     'age' => $item['age'], 
  22.     'gender' => $item['性别'] == '男' ? 'male' : 'female'
  23.   ); 
  24. }, $users); 
  25. // 修改原数组,对年龄+10处理,同时新增索引gender,返回值 1 或 0 
  26. array_walk($usersfunction(&$item$index){ 
  27.   $item['gender'] = $item['性别'] == '男' ? 'male' : 'female'
  28.   if ($index % 2 == 0) { 
  29.     $item['age'] += 10; 
  30.   } 
  31. }); 
  32. //array_reduce(array $input , callable $function [,$initial = NULL ]) 用回调函数迭代地将数组简化为单一的值 
  33. // 求最大年龄的用户,返回最大年龄用户信息 
  34. $arrayReduce = array_reduce($usersfunction($init$val){ 
  35.   return $init['age'] > $val['age'] ? $init : $val
  36. }, array('age' => 0)); 
  37. // 求平均年龄 
  38. $avgAge = array_reduce($usersfunction($init$item){ 
  39.   return $init + $item['age']; 
  40. }, 0) / count($users); 
  41. /* 
  42.  * array_reduce 的内部实现方式 
  43. function array_reduce($data, $callback, $initial) { 
  44.   foreach ($data as $index => $val) { 
  45.     $initial = $callback($initial, $val); 
  46.   } 
  47.   return $initial; 
  48. } 
  49. */ 
  50. //用array_map和array_mutisort来排序  
  51. //利用array_map获取要依据排序的数组,(匿名函数 create_function($args, return $val)) 
  52. //$arrField = array_map(create_function('$item', 'return $item["age"];'), $users); 【不推荐】 
  53. $arrField = array_map(function($item){ 
  54.   return $item['age']; 
  55. }, $users); 
  56. //利用array_mutisort来进行年龄从大到小排序 
  57. $arrSort = array_multisort($arrField, SORT_DESC, $users); 
  58.  
  59. //闭包实现计数器 
  60. function counts() { 
  61.   $a = 1; 
  62.   // 闭包,引用变量$a 
  63.   return function() use(&$a) { 
  64.     return $a++; 
  65.   }; 
  66. $countFunc = counts(); 
  67. echo $countFunc(); // 1 
  68. echo $countFunc(); // 2 
  69. echo $countFunc(); // 3 
  70. echo $countFunc(); // 4

Tags: php函数式编程

分享到: