• PHP中create_function的用法总结


    在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 ”;

    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 ”;

    print_r(filterChars2($a));

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

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

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

    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

    )

  • 相关阅读:
    NOIP 2017逛公园(记忆化搜索)
    NOIP 2012疫情控制 (二分+倍增+贪心)
    NOIP 2005过河(DP+路径压缩)
    P1198 [JSOI2008]最大数
    [Noip2016]蚯蚓
    [六省联考2017]期末考试
    六省联考:组合数问题
    蒜头君的兔子
    bzoj1015 [JSOI2008]星球大战starwar
    luogu P3370 【模板】字符串哈希
  • 原文地址:https://www.cnblogs.com/chengzhi59/p/7101978.html
Copyright © 2020-2023  润新知