本文目錄一覽:
- 1、php裡面怎麼為數組的每個元素應用回調函數?
- 2、PHP回調函數到底是個啥
- 3、PHP回調函數及匿名函數概念與用法詳解
- 4、PHP通過ODBC連接到PROGRESS資料庫?
- 5、php中怎麼實現讀取數據進度條功能?
php裡面怎麼為數組的每個元素應用回調函數?
具體看是想對元素如何操作,比如 array_filter():用回調函數過濾數組中的單元,可以使用回調函數對數組中元素進行篩選剔除元素;
如果是針對每個元素,使用其他函數的話,array_map :數組的每個元素應用回調函數,使用示例:
為數組每個元素執行+5計算;
$arr = [1,2,3,4,5];
#匿名函數操作
$res=array_map(function($item){return $item*2; },$arr);
array_map(“函數名”, 數組);支持使用 函數名+數據變數 使用。
PHP回調函數到底是個啥
回調函數就是那些自己寫的,但是不是自己來調,而是給別人來掉的函數。
就像下面的odd()和even()函數一樣。
?php
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array(“a”=1, “b”=2, “c”=3, “d”=4, “e”=5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo “Odd :\n”;
print_r(array_filter($array1, “odd”));//這裡把array1的值依次傳入到odd這個函數裡面,這種方式就稱為回調
echo “Even:\n”;
print_r(array_filter($array2, “even”));
?
下面這個例子實現函數的回調
?
function fnCallBack($msg1, $msg2)
{
echo ‘msg1:’.$msg1;
echo ‘br/’;
echo ‘msg2:’.$msg2;
}
$fnName = ‘fnCallBack’;//函數名
$params = array(‘hello’, ‘world’);//將要傳入到函數裡面的參數
call_user_func_array($fnName, $params);
?
PHP回調函數及匿名函數概念與用法詳解
PHP的回調函數其實和C,Java等語言的回調函數的作用是一模一樣的,都是在主線程執行的過程中,突然跳去執行設置的回調函數;
回調函數執行完畢之後,再回到主線程處理接下來的流程;
而在PHP調用回調函數,不像C以及Java那樣直接使用函數名作為函數參數,而是在PHP中使用函數對應的字元串名稱執行。
// call_user_func — 把第一個參數作為回調函數調用
// 第一個參數 callback 是被調用的回調函數,其餘參數是回調函數的參數。
// PHP中的匿名函數,也叫閉包函數,允許指定一個沒有名稱的函數。最常用的就是回調函數的參數值。
//檢測一個函數變數是否是一個閉包
// 傳入參數,引用局部變數
PHP通過ODBC連接到PROGRESS資料庫?
Progress的ODBC並不是通用的,需要用專門的ODBC工具軟體來連接,最常用的是Merant ODBC,此以Merant3.7來介紹如何連接progress資料庫,由於可能存在不同的操作系統,當然連接方式有些不同.使用Merant3.7需要在客戶端安裝Progress資料庫才可以.
服務端unix(即資料庫存放在unix上),客戶端window2000伺服器配置:
1.在/etc/services配置文件中添加一行啟動odbc的埠,例如:
merant 6000/tcp # merantODBC的埠
2.在需要使用odbc的用戶的.profile文件中增加變數及路徑例如:
DLC=/dlc/91e /*安裝的progress的路徑*/
PROOIBRK=/dlc/91e/bin/_prooibk /*需要調用的程序的路徑*/PROOIDRV=/dlc/91e/bin/_prooidv /*需要調用的程序的路徑*/PATH=/dlc/91e/bin:$PATH
export PATH
export DLC
export PROOIBRK
export PROOIDRV
3.執行啟動odbc的命令
例如:
/dlc/91e/bin/_prooibk -SV -S merant /*根據progress安裝的目錄不同會不同,merant是services中增加的埠名稱,兩邊可以隨便取名字但必須一樣*/客戶端配置:
1.同服務端配置一樣需要在C:WINNTsystem32driversetc的services文件中增加一行例如:
merant 6000/tcp # merantODBC的埠
2.在系統控制台增加環境變數,建議增加系統的環境變數,根據客戶端progress安裝的目錄不同,可能有所不同DLC c:dlc The directory where you installed the Progress client piecesIDLC c:dlc Required only for 8.1 or higher clientsPROMSGS c:dlcpromsgs The directory and name of the message fileIPROMSGS c:dlcpromsgs Required only for 8.1 or higher clientsPATH c:dlcbin;c:dlc;c:winNTsystem32;%path% Example for Windows NTTEMP c:temp
3.在odbc數據源中作如下配置:
general:
data source name:自己取名
description:隨便
database name:資料庫的名字
user id:不填
oid/oib options:
protocol:tcp
service name:在services文件中加的merantodbc的埠名稱host name:伺服器的名稱或ip(建議用ip,否則還要在hosts文件中加解析)database options:
database access mode:via server
protocol:tcp
service name:啟動資料庫的埠名(是在服務端啟動資料庫服務的埠名也是在服務端的services文件中)host name:啟動資料庫服務的機器名或ip(推薦ip)完成後應該可以連接上了
php中怎麼實現讀取數據進度條功能?
?php//防止執行超時set_time_limit(0);//清空並關閉輸出緩存ob_end_clean();//需要循環的數據for($i = 0; $i 188; $i++){ $users[] = ‘Tom_’ . $i;}//計算數據的長度$total = count($users);//顯示的進度條長度,單位 px$width = 500;//每條記錄的操作所佔的進度條單位長度$pix = $width / $total;//默認開始的進度條百分比$progress = 0;?htmlheadtitle動態顯示伺服器運行程序的進度條/titlemeta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /stylebody,div input { font-family: Tahoma; font-size: 9pt}/stylescript language=”JavaScript” !– function updateProgress(sMsg, iWidth) { document.getElementById(“status”).innerHTML = sMsg; document.getElementById(“progress”).style.width = iWidth + “px”; document.getElementById(“percent”).innerHTML = parseInt(iWidth / ?php echo $width; ? * 100) + “%”; } — /script/headbody div style=”margin:50px auto; padding: 8px; border: 1px solid gray; background: #EAEAEA; width: ?php echo $width+8; ?px” div style=”padding: 0; background-color: white; border: 1px solid navy; width: ?php echo $width; ?px” div id=”progress” style=”padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px”/div /div div id=”status”/div div id=”percent” style=”position: relative; top: -30px; text-align: center; font-weight: bold; font-size: 8pt”0%/div /div?phpflush(); //將輸出發送給客戶端瀏覽器foreach($users as $user){ // 在此處使用空循環模擬較為耗時的操作,實際應用中需將其替換; // 如果你的操作不耗時,我想你就沒必要使用這個腳本了 :) for($i = 0; $i 1000000; $i++) { } ?script language=”JavaScript” updateProgress(“正在操作用戶 ?php echo $user; ? ….”, ?php echo min($width, intval($progress)); ?);/script?php flush(); //將輸出發送給客戶端瀏覽器,使其可以立即執行伺服器端輸出的 JavaScript 程序。 $progress += $pix;} //end foreach?script language=”JavaScript” //最後將進度條設置成最大值 $width,同時顯示操作完成 updateProgress(“操作完成!”, ?php echo $width; ?);/script?phpflush();?/body/html
原創文章,作者:IQWF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140394.html