本文目录一览:
- 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