array_multisort 在php 中该函数实现多维数组的排序功能,在呼叫中心或者计费服务器中,或许我们需要实现多台服务器按权重(百分比)的模式进行对语音进行分发,那么该函数将帮助你实现该需求。
实例中core_callback_setting 将会保存可以使用的服务器的配置信息:
id---字段ID,也是服务器的ID标记
,ast_ob_servername ---服务器的名字标识,
,ast_ob_host-----服务器IP地址
,ast_ob_port-----AMI 服务器端口
,ast_ob_user-----AMI 服务器验证用户名
,ast_ob_pwd-------AMI 服务器验证密码
,percent_rate-----服务器权重
,current_threads----服务器当前并发
,max_threads-------服务器最大并发
,last_dispatch_time---最近一次分发到该服务器的时间
,ast_version-------软交换的版本
下面将是具体实现的逻辑函数
//function get cb server function get_callback_srv() { global $conn; $cb_srv_ary=array(); $srv_tmp_ary1=array(); $srv_tmp_ary2=array(); $sql="SELECT id,ast_ob_servername,ast_ob_host,ast_ob_port,ast_ob_user,ast_ob_pwd,percent_rate,current_threads,max_threads,last_dispatch_time,ast_version FROM core_callback_setting WHERE state AND percent_rate"; #echo $sql,"\n"; $rslt=mysql_query($sql,$conn); $rcnt=mysql_num_rows($rslt); if($rcnt>0) { if($rcnt ==1) { #echo "目前只有一个服务器满足要求.....\n"; $cb_srv_ary=mysql_fetch_assoc($rslt); } else { for($j=0;$j<$rcnt;$j++) { $row=mysql_fetch_assoc($rslt); $srv_id=$row[‘id‘]; $srv_tmp_ary1[$srv_id]=$row; $r_rate=round($row[‘current_threads‘]/$row[‘percent_rate‘],4); $srv_tmp_ary2[]=array(‘srv_id‘=> $row[‘id‘], ‘last_dispatch_time‘ => $row[‘last_dispatch_time‘], ‘r_rate‘=> $r_rate); } ##获取记录后,对记录进行排序 foreach($srv_tmp_ary2 as $key => $row) { $val1[$key]=$row[‘r_rate‘]; $val2[$key]=$row[‘last_dispatch_time‘]; } ##数组排序 array_multisort($val1,SORT_ASC,$val2,SORT_ASC,$srv_tmp_ary2); #print_r($srv_tmp_ary2); ##获取第一个 #echo ">>>>>>>>>>>>>>>>>>>>>>>>\n"; $srv_id=$srv_tmp_ary2[0][‘srv_id‘]; #print_r($srv_tmp_ary1[$srv_id]); $cb_srv_ary=$srv_tmp_ary1[$srv_id]; } } else { writelog($sql); } return $cb_srv_ary; }
本文出自 “asterisk系统专栏” 博客,谢绝转载!
PHP 多维数组的排序----服务器负载均衡的应用,布布扣,bubuko.com
原文:http://carryf.blog.51cto.com/8355956/1541971