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

)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM