在php中,函数create_function主要用来创建匿名函数,有时候匿名函数可以发挥它的作用。

1.测试一

测试一主要用来循环替换数组中多个值的<与>,我们用array_map加上create_function解决这个问题。

###############################################

function filterChars($a) {

if (!is_array($a)) return false;

$a = array_map(create_function(‘$b’, ‘return str_replace(array(“>”, “<”), array(“&gt;”, “&lt;”), $b);’), $a);

return $a;

}

$a = array(‘abcd&>’, ‘def<’);

echo “array_map and create_function\n”;

print_r(filterChars($a));

###############################################

2.测试二

测试二与测试一实现同样的功能,只不过我们用的不是匿名函数,而是用自定义函数实现的,而且这个自定义函数实现在另外一个函数里面。

###############################################

function filterChars2($a) {

if (!is_array($a)) return false;

function filterStr($str) {

return str_replace(array(“>”, “<”), array(“&gt;”, “&lt;”), $str);

}

$a = array_map(‘filterStr’, $a);

return $a;

}

$a = array(‘abcd&>’, ‘def<’);

echo “array_map and create_function and custom function\n”;

print_r(filterChars2($a));

//如果调用了filterchar2函数,则在下面调用filterStr时不报错,如果在上面没有调用filterChar2函数,则会报类似如下的错误,Fatal error: Call to undefined function filterStr() in D:\myphp\research\test4.php on line 334

echo ‘filterStr:’ . filterStr(‘ab&<>cd’) . “\n”;

###############################################

3.测试三

测试三主要用来过滤文件中的空行,同时用trim去掉每一行的换行符然后保存在数组中。

###############################################

$file = ‘tmp_user.txt’;

if (file_exists($file)) {

$usernames = file($file);

print_r($usernames);

/*

array array_filter ( array input [, callback callback] )

array_filter() 依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

切记,即使在array_filter中的create_function中用trim过滤了空白字符,但是仍然需要用array_map处理每一行中的内容,因为array_filter的作用是,只要回调函数返回true,则数组中当前的值被返回,返回的是用trim处理之前的值,也就是原始的值。

*/

$usernames = array_filter($usernames, create_function(‘$id’, ‘$id = trim($id); return !empty($id);’));

//由于文件通过file加载到数组中,因此一定要用trim处理一下去掉换行符

$usernames = array_map(create_function(‘$id’, ‘$id = trim($id); return $id;’), $usernames);

print_r($usernames);

}

###############################################

输出如下:

测试一

array_map and create_function

Array

(

[0] => abcd&&gt;

[1] => def&lt;

)

测试二

array_map and create_function and custom function

Array

(

[0] => abcd&&gt;

[1] => def&lt;

)

filterStr:ab&&lt;&gt;cd

测试三

Array

(

[0] => ab

[1] => cd

[2] =>

[3] => ef

[4] => gh

)

Array

(

[0] => ab

[1] => cd

[3] => ef

[4] => gh

)

PHP中create_function的用法总结的更多相关文章

  1. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  2. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  3. SQL中distinct的用法

    SQL中distinct的用法   1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

  4. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  5. jQuery中Animate进阶用法(一)

    jQuery中animate的用法你了解多少呢?如果仅仅是简单的移动位置,显示隐藏,哦!天哪你在浪费资源!因为animate太强大了,你可以有很多意想不到的用法!让我们一起研究一下吧~~ 首先要了解j ...

  6. [转载]js中return的用法

    一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函 ...

  7. js中this的用法

    经过近几周的模拟面试题,我查询了一些资料,今天就来说说,在js中this的用法吧.方法有四:第一,用作全局变量,第二,用作表该对象,第三,用作构造函数,第四,用作call和applay

  8. jQuery中eq()方法用法实例

    本文实例讲述了jQuery中eq()方法用法.分享给大家供大家参考.具体分析如下: 此方法能够获取匹配元素集上的相应位置索引的元素. 匹配元素集上元素的位置索引是从0开始的. 语法结构: 复制代码 代 ...

  9. php中return的用法实例分析

    本文实例讲述了php中return的用法.分享给大家供大家参考.具体分析如下: 首先,它的意思就是返回;return()是语言结构而不是函数,仅在参数包含表达式时才需要用括号将其括起来.当返回一个变量 ...

随机推荐

  1. 显示 Mac隐藏的文件夹 命令语句

    默认情况下,模拟器的目录是隐藏的,要想显示出来,需要在Mac终端输入下面的命令 显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFil ...

  2. 2018.5.27 OraclePLSQL编程 if-else练习和循环结构练习

    if-else运用 declare v_num number(8); begin v_num :=&n; if v_num>0 and v_num<100 then dbms_ou ...

  3. 2017.12.20 Java中的 IO/XML学习总结 File类详细

    IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...

  4. 解决centos7 nslookup:command not found

    解析域名www.google.com时,报错,命令找不到,是因为新安装的centos7,没有安装bind-utils,安装后就可以运行nslookup了

  5. CUDA编程时,线程块的处理方法

  6. Drupal忘记管理员密码

    第一步:登陆录到phpmyadmin(通用的mysql数据库管理工具),进入phpmyadmin后,找到与drupal7相关联数据库并在数据库中找到一张名为“users”的表,然后选择浏览. 第二步: ...

  7. Nginx学习记录(一)

    1. 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支 ...

  8. nginx入门学习步骤(linux)

    一.nginx下载(nginx-1.9.9) http://nginx.org/download/ 二.解压到指定文件夹 tar -zxvf 解压缩文件 三.设置配置信息 在nignx解压文件夹内执行 ...

  9. hello spring boot neo4j

    新建springboot 项目: https://www.cnblogs.com/lcplcpjava/p/7406253.html bug fixs: 1. Maven Configuration ...

  10. CentOS---JDK安装与配置

    1.先查看一下CentOS中存在的jdk安装包信息 # rpm -qa | grep java 查看CentOS安装的jdk版本 #java -version 2.分别执行以下命令将所有相关包都删除 ...