導航:首頁 > 編程語言 > php回調函數例子

php回調函數例子

發布時間:2023-12-19 20:02:58

php array_walk() 數組函數

復制代碼
代碼如下:
/*函數array_walk():單一數組回調函數---對數組中的每個成員應用用戶函數
*
1、語法:bool
array_walk
(
array
&array,
callback
funcname
[,
mixed
$userdata]
)
*
2、描述:如果成功則返回
TRUE,失敗則返回
FALSE
*
3、注意事項:
*
3.1、$funcname是用戶自己
定義的回調函數,接受2個參數,第一個參數為數組$array的值,第二個參數為
*
數組$array的鍵名,如果提供第三個參數$userdata,將作為第三個參數傳遞給回調函數$funcname
*
3.2、使用回調函數可以直接更改數組各個單元的值,但更改各個鍵名是無效的
*
3.3、該函數
不會受到
array
內部數組指針的影響。array_walk()
會遍歷整個數組而不管指針
*
的位置
*
3.4、用戶不應在回調函數中改變該數組本身,例如增加/刪除單元,unset
單元等等,如果
array_walk()
*
作用的數組改變了,則此函數的的行為未經定義,且不可預期。
*/
$words=array("l"=>"lemon","o"=>"orange","b"=>"banana","a"=>"apple");
//定義一個回調函數,輸出數組元素
function
words_print($value,$key,$prefix){
echo
"$prefix:$key=>$value<br>\n";
}
//定義一個回調函數直接改變元素的值
function
words_alter(&$value,$key){
$value=ucfirst($value);
$key=strtoupper(key);
}
//輸出元素的值
array_walk($words,'words_print','words');
//改變元素的值
array_walk($words,'words_alter');
echo
"<pre>";
print_r($words);
echo
"</pre>";
運行效果如下:

⑵ 如何向回調函數中傳入其他參數

成員函數名不能作為參數傳遞,否則會發生錯誤,因為裡面隱藏著一個this 指針
回調函數,就是由你自己寫的。你需要調用另外一個函數,而這個函數的其中一個參數,就
是你的這個回調函數名。這樣,系統在必要的時候,就會調用你寫的回調函數,這樣你就可
以在回調函數里完成你要做的事。
模塊A有一個函數foo,它向模塊B傳遞foo的地址,然後在B裡面發生某種事件(event)時,通過從A裡面傳遞過來的foo的地址調用foo,通知A發生了什麼事情,讓A作出相應反應。 那麼我們就把foo稱為回調函數。

例子:
回調函數是一個很有用,也很重要的概念。當發生某種事件時,系統或其他函數將會自動調用你定義的一段函數。回調函數在windows編程使用的場合很多,比如Hook回調函數:MouseProc,GetMsgProc以及EnumWindows,DrawState的回調函數等等,還有很多系統級的回調過程。本文不準備介紹這些函數和過程,而是談談實現自己的回調函數的一些經驗。
之所以產生使用回調函數這個想法,是因為現在使用VC和Delphi混合編程,用VC寫的一個DLL程序進行一些時間比較長的非同步工作,工作完成之後,需要通知使用DLL的應用程序:某些事件已經完成,請處理事件的後續部分。開始想過使用同步對象,文件影射,消息等實現DLL函數到應用程序的通知,後來突然想到可不可以在應用程序端先寫一個函數,等需要處理後續事宜的時候,在DLL里直接調用這個函數即可。
於是就動手,寫了個回調函數的原形。在VC和 Delphi里都進行了測試
一:聲明回調函數類型。
vc版
typedef int (WINAPI *PFCALLBACK)(int Param1,int Param2) ;
二:聲明回調函數原形
聲明函數原形
vc版
int WINAPI CBFunc(int Param1,int Param2);
三: 回調函數調用調用者
調用回調函數的函數我把它放到了DLL里,這是一個很簡單的VC生成的WIN32 DLL.並使用DEF文件輸出其函數名 TestCallBack。實現如下:
PFCALLBACK gCallBack=0;

void WINAPI TestCallBack(PFCALLBACK Func)
{
if(Func==NULL)return;
gCallBack=Func;
DWORD ThreadID=0;
HANDLE hThread = CreateThread( NULL, NULL, Thread1, LPVOID(0), &ThreadID );
return;
}
此函數的工作把傳入的 PFCALLBACK Func參數保存起來等待使用,並且啟動一個線程。聲明了一個函數指針PFCALLBACK gCallBack保存傳入的函數地址。
四: 回調函數如何被使用:
TestCallBack函數被調用後,啟動了一個線程,作為演示,線程人為的進行了延時處理,並且把線程運行的過程列印在屏幕上.
五:萬事具備
使用vc和Delphi各建立了一個工程,編寫回調函數的實現部分
VC版
int WINAPI CBFunc(int Param1,int Param2)
{
int res= Param1+Param2;
TCHAR Buffer[256]="";
sprintf(Buffer,"callback result = %d",res);
MessageBox(NULL,Buffer,"Testing",MB_OK); //演示回調函數被調用
return res;
}

Delphi版
function CBFunc(Param1,Param2:integer):integer;
begin
result:= Param1+Param2;
TForm1.Edit1.Text:=inttostr(result); / /演示回調函數被調用
end;

使用靜態連接的方法連接DLL里的出口函數 TestCallBack,在工程里添加 Button( 對於Delphi的工程,還需要在Form1上放一個Edit控制項,默認名為Edit1)。
響應ButtonClick事件調用 TestCallBack

TestCallBack(CBFunc) //函數的參數CBFunc為回調函數的地址

函數調用創建線程後立刻返回,應用程序可以同時干別的事情去了。現在可以看到屏幕上不停的顯示字元串,表示dll里創建的線程運行正常。一會之後,線程延時部分結束結束,vc的應用程序彈出MessageBox,表示回調函數被調用並顯示根據Param1,Param2運算的結果,Delphi的程序edit控制項里的文本則被改寫成Param1,Param2 的運算結果。

⑶ PHP處理數組常用的幾個函數

一、數組操作的基本函數
數組的鍵名和值
array_values($arr); 獲得數組的值
array_keys($arr); 獲得數組的鍵名
array_flip($arr); 數組中的值與鍵名互換(如果有重復前面的會被後面的覆蓋)
in_array("apple",$arr); 在數組中檢索apple
array_search("apple",$arr); 在數組中檢索apple ,如果存在返回鍵名
array_key_exists("apple",$arr); 檢索給定的鍵名是否存在數組中
isset($arr[apple]): 檢索給定的鍵名是否存在數組中
數組的內部指針
current($arr); 返回數組中的當前單元
pos($arr); 返回數組中的當前單元
key($arr); 返回數組中當前單元的鍵名
prev($arr); 將數組中的內部指針倒回一位
next($arr); 將數組中的內部指針向前移動一位
end($arr); 將數組中的內部指針指向最後一個單元
reset($arr; 將數組中的內部指針指向第一個單元
each($arr); 將返回數組當前元素的一個鍵名/值的構造數組,並使數組指針向前移動一位
list($key,$value)=each($arr); 獲得數組當前元素的鍵名和值
數組和變數之間的轉換
extract($arr);用於把數組中的元素轉換成變數導入到當前文件中,鍵名當作變數名,值作為變數值
註:(第二個參數很重要,可以看手冊使用)使用方法 echo $a;
compact(var1,var2,var3);用給定的變數名創建一個數組
二、數組的分段和填充
數組的分段
array_slice($arr,0,3); 可以將數組中的一段取出,此函數忽略鍵名
array_splice($arr,0,3,array("black","maroon")); 可以將數組中的一段取出,與上個函數不同在於返回的序列從原數組中刪除
分割多個數組
array_chunk($arr,3,TRUE); 可以將一個數組分割成多個,TRUE為保留原數組的鍵名
數組的填充
array_pad($arr,5,'x'); 將一個數組填補到制定長度
三、數組與棧
array_push($arr,"apple","pear"); 將一個或多個元素壓入數組棧的末尾(入棧),返回入棧元素的個數
array_pop($arr); 將數組棧的最後一個元素彈出(出棧)
四、數組與列隊
array_shift($arr);數組中的第一個元素移出並作為結果返回(數組長度減1,其他元素向前移動一位,數字鍵名改為從零技術,文字鍵名不變)
array_unshift($arr,"a",array(1,2));在數組的開頭插入一個或多個元素
五、回調函數
array_walk($arr,'function','words'); 使用用戶函數對數組中的每個成員進行處理(第三個參數傳遞給回調函數function)
array_mpa("function",$arr1,$arr2); 可以處理多個數組(當使用兩個或更多數組時,他們的長度應該相同)
array_filter($arr,"function"); 使用回調函數過濾數組中的每個元素,如果回調函數為TRUE,數組的當前元素會被包含在返回的結果數組中,數組的鍵名保留不變
array_rece($arr,"function","*"); 轉化為單值函數(*為數組的第一個值)
六、數組的排序
通過元素值對數組排序
sort($arr); 由小到大的順序排序(第二個參數為按什麼方式排序)忽略鍵名的數組排序
rsort($arr); 由大到小的順序排序(第二個參數為按什麼方式排序)忽略鍵名的數組排序
usort($arr,"function"); 使用用戶自定義的比較函數對數組中的值進行排序(function中有兩個參數,0表示相等,正數表示第一個大於第二個,負數表示第一個小於第二個)忽略鍵名的數組排序
asort($arr); 由小到大的順序排序(第二個參數為按什麼方式排序)保留鍵名的數組排序
arsort($arr); 由大到小的順序排序(第二個參數為按什麼方式排序)保留鍵名的數組排序
uasort($arr,"function"); 使用用戶自定義的比較函數對數組中的值進行排序(function中有兩個參數,0表示相等,正數表示第一個大於第二個,負數表示第一個小於第二個)保留鍵名的數組排序
通過鍵名對數組排序
ksort($arr); 按照鍵名正序排序
krsort($arr); 按照鍵名逆序排序
uksort($arr,"function"); 使用用戶自定義的比較函數對數組中的鍵名進行排序(function中有兩個參數,0表示相等,正數表示第一個大於第二個,負數表示第一個小於第二個)
自然排序法排序
natsort($arr); 自然排序(忽略鍵名)
natcasesort($arr); 自然排序(忽略大小寫,忽略鍵名)
七、數組的計算
數組元素的求和
array_sum($arr); 對數組內部的所有元素做求和運算
數組的合並
array_merge($arr1,$arr2); 合並兩個或多個數組(相同的字元串鍵名,後面的覆蓋前面的,相同的數字鍵名,後面的不會做覆蓋操作,而是附加到後面)
「+」$arr1+$arr2; 對於相同的鍵名只保留後一個
array_merge_recursive($arr1,$arr2); 遞歸合並操作,如果數組中有相同的字元串鍵名,這些值將被合並到一個數組中去。如果一個值本身是一個數組,將按照相應的鍵名把它合並為另一個數組。當數組 具有相同的數組鍵名時,後一個值將不會覆蓋原來的值,而是附加到後面
數組的差集
array_diff($arr1,$arr2); 返回差集結果數組
array_diff_assoc($arr1,$arr2,$arr3); 返回差集結果數組,鍵名也做比較
數組的交集
array_intersect($arr1,$arr2); 返回交集結果數組
array_intersect_assoc($arr1,$arr2); 返回交集結果數組,鍵名也做比較
八、其他的數組函數
range(0,12); 創建一個包含指定范圍單元的數組
array_unique($arr); 移除數組中重復的值,新的數組中會保留原始的鍵名
array_reverse($arr,TRUE); 返回一個單元順序與原數組相反的數組,如果第二個參數為TRUE保留原來的鍵名
//srand((float)microtime()*10000000); 隨機種子觸發器
array_rand($arr,2); 從數組中隨機取出一個或 多個元素
shuffle($arr); 將數組的順序打亂
求課吧有很多關於PHP編程方面的教程

⑷ PHP-Array函數簡介-數組操作-php實例教程

count()計算數組中的元素數目或對象中的屬性個數。3current()返回數組中的當前元素。3each()返回數組中當前的鍵/值對並將數組指針向前移動一步。3end()將數組的內部指針指向最後一個元素。3extract()從數組中將變數導入到當前的符號表。3in_array()檢查數組中是否存在指定的值。4key()從關聯數組中取得鍵名。3krsort()對數組按照鍵名逆向排序。3ksort()對數組按照鍵名排序。3list()把數組中的值賦給一些變數。3natcasesort()用「自然排序」演算法對數組進行不區分大小寫字母的排序。4natsort()用「自然排序」演算法對數組排序。4next()將數組中的內部指針向前移動一位。3pos()current()
的別名。3prev()將數組的內部指針倒回一位。3range()建立一個包含指定范圍的元素的數組。3reset()將數組的內部指針指向第一個元素。3rsort()對數組逆向排序。3shuffle()把數組中的元素按隨機順序重新排列。3sizeof()count()
的別名。3sort()對數組排序。3uasort()使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯。3uksort()使用用戶自定義的比較函數對數組中的鍵名進行排序。3usort()使用用戶自定義的比較函數對數組中的值進行排序。3

⑸ 用自己的語言說出php中數組的常用函數和用法

array_filter : 過濾數組中的無效元素,可以使用回調函數過濾

array_map : 使用回調函數依次處理所有元素

implode: 將一維數組轉為特定符號隔開的字元串,

explode: 將特定符號隔開的字元串轉為一維數組

sort /ksort: 將數組進行升序排序

array_unique: 將數組元素去重

array_values: 取數組的值,重新組成新數組

array_pop: 取數組末尾元素並刪除(隊列)

array_push:將一個元素插入數組末尾(隊列)

array_sum:統計數組元素的和

array_column:將二維數組中的指定KEY取出組成一個一維數組

網頁鏈接


閱讀全文

與php回調函數例子相關的資料

熱點內容
得物app用什麼方式出售 瀏覽:783
linuxandroid模擬器下載 瀏覽:971
php類常量訪問 瀏覽:586
視頻文件壓縮工具 瀏覽:13
什麼什麼佳人app 瀏覽:6
施耐德cfc編程 瀏覽:307
如何把pdf文件轉成圖片 瀏覽:536
張劍閱讀150篇pdf 瀏覽:356
拉卡拉收款寶app叫什麼名 瀏覽:340
c4d動態解壓 瀏覽:711
多個pdf合並為一個 瀏覽:314
程序中的編譯執行 瀏覽:32
plc控制與單片機控制 瀏覽:884
如何讓安卓手機操控電腦 瀏覽:187
電腦電銷加密電話號碼破解 瀏覽:506
世界史綱pdf 瀏覽:135
湖北社保年審app叫什麼名字 瀏覽:853
邁達克雲伺服器 瀏覽:598
mfc深入淺出從mfc設計到mfc編程 瀏覽:82
螢石雲伺服器連接設置 瀏覽:327