Functions should do one thing一个函数应该只做一件事
if you take nothing else away from this guide other than this,
you'll be ahead of many developers.
如果你不离开这个指南,除此之外,你将超越大多数的开发者。


1、array_walk 使用用户自定义函数对数组中的每个元素做回调处理
array_walk(array &$array,callable $callback[,mixed $userdata = NULL])
将用户自定义函数funcname应用到array数组中的每个单元。
array_walk()不会受到array内部数组指针的影响。
array_walk()会遍历整个数组而不管指针的位置。
它的参数
1》array 输入的数组。
2》callback 典型情况下callback接受两个参数。
(array参数的值作为第一个,键名作为第二个)
如果callback需要直接作用于数组中的值,则给callback的
第一个参数指定为引用。这样任何对这些单元的改变也将会
改变原始数组本身。
参数数量超过预期,传入内置函数(例如strtolower()),将抛出警告,
所以不适合当做funcname.
只有array的值才可以被改变,用户不应在回调函数中改变该数组本身
的结构。例如增加/删除单元,unset单元等等。如果array_walk()作用
的数组改变了,则此函数的行为未经定义,且不可预期。
3》userdata
如果提供了可选参数userdata,将被作为第三个参数传递给callback funcname
它的返回值
成功返回true,失败返回false.





2、array_filter
array_filter用回调函数过滤数组中的单元
array array_filter(array $array[,callable $callback[,int $flag=0]])
依次将array数组中的每个值传递到callback函数。
如果callback函数返回true,则array数组的当前值会被包含在返回
的结果数组中。数组的键名保留不变。
它的参数
1》array
要循环的数组
2》callback
使用的回调函数
如果没有提供callback函数,将删除array中所有等值为
false的条目。
3》flag
决定callback接收的参数形式
ARRAY_FILTER_USE_KEY-callback接受键名作为的唯一参数
ARRAY_FILTER_USE_BOTH-callback同时接受键名和键值
它的返回值
返回过滤后的数组
5.6版本添加可选的参数flag,以及常量ARRAY_FILTER_USE_KEY
和ARRAY_FILTER_USE_BOTH


不使用callback的array_filter(),自动过滤值为false,null,''的键值对


带flag标记的array_filter()


Caution警告: 用户不应在回调函数中修改数组本身。
例如增加/删除单元或者对array_filter()正在作用的
数组进行unset。如果数组改变了,此函数的行为将不可预测
Functions should do one thing一个函数应该只做一件事的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议144:一个方法只做一件事
建议144:一个方法只做一件事 “单一职责原则”(SRP)要求每一个类型只负责一件事情.我们将此概念扩展到方法上,就变成了:一个方法只做一件事. 回顾上一建议的代码,LocalInit和RemoteI ...
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- 让一个端口同时做两件事:http/https和ssh
相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache.Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Serv ...
- 做一个App前需要考虑的几件事
本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...
- [转载]做一个 App 前需要考虑的几件事
本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...
- netty源码理解(一):new一个NioEventLoopGroup的时候做了哪些事
好了,回到构造方法的调用中
- 我在开发第一个Swift App过程中学到的四件事
本文转载至 http://www.itjhwd.com/wzkfyigeswiftsjs/ 译者注:本文作者Greg Heo,这是他为讲授iOS 8 App Extensions视频教程而实际使用Sw ...
- SQL Fundamentals: Using Single-Row Functions to Customize Output使用单行函数自定义输出
SQL Fundamentals || Oracle SQL语言 DUAL is a public table that you can use to view results from functi ...
- jQuery 源码分析:当 selector 传来一个函数时,怎么进行处理?
本文章为 0.9 版本,将会在稍后润色更新.本文使用的 jQuery 版本为 3.4.0 我们知道使用 $ 操作符时,可以往里面塞很多类型的参数,字符串,对象,函数...,jQuery 会根据不同的参 ...
随机推荐
- 【BZOJ2034】[2009国家集训队]最大收益 贪心优化最优匹配
[BZOJ2034][2009国家集训队]最大收益 Description 给出N件单位时间任务,对于第i件任务,如果要完成该任务,需要占用[Si, Ti]间的某个时刻,且完成后会有Vi的收益.求最大 ...
- Restoring Road Network
D - Restoring Road Network Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem State ...
- 如何使用模板生成 sqlite3 sql 创建语句?
template<typename T,typename... Args> std::string createTable(T tableName,Args&&... ar ...
- Linux下源码安装redis,编译安装
1.下载redis源码 [root@localhost opt]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩 [ ...
- 怎样使用Chrome模拟手机浏览器測试移动端网站
作者:zhanhailiang 日期:2014-10-10 环境说明: Chrome 37.0.2062.124 m 1. 通过[菜单→工具→开发人员工具|Javascript控制台]或[快捷键Ctr ...
- 面试10大算法汇总+常见题目解答(Java)
原文地址:http://www.lilongdream.com/2014/04/10/94.html(为转载+整理) 以下从Java的角度总结了面试常见的算法和数据结构:字符串,链表,树,图,排序,递 ...
- [转] CentOS---网络配置详解
原文地址: http://blog.chinaunix.net/uid-26495963-id-3230810.html 一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里, ...
- C#使用Lock访问共享数据的问题
lock 语句(C# 参考) lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.此语句的形式如下: 复制 Object thisLock = new Objec ...
- Python之------初识面向对象(Day22)
一.面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序 ...
- 常用python模块
webbrowser浏览器控制模块 主要知道 导入 webbrowser使用webbrowser.open(url)运行就可以在默认浏览器打开指定url 来自为知笔记(Wiz)