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\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

)

延伸閱讀:

http://www.baidu.com/s?wd=php+create_function

http://www.google.com/search?q=php+create_function

http://www.soso.com/q?w=php+create_function

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章