array_multisort 在php 中該函數實現多維數組的排序功能,在呼叫中心或者計費服務器中,或許咱們須要實現多臺服務器按權重(百分比)的模式進行對語音進行分發,那麼該函數將幫助你實現該需求。php
實例中core_callback_setting 將會保存能夠使用的服務器的配置信息:mysql
id---字段ID,也是服務器的ID標記sql
,ast_ob_servername ---服務器的名字標識,數組
,ast_ob_host-----服務器IP地址服務器
,ast_ob_port-----AMI 服務器端口併發
,ast_ob_user-----AMI 服務器驗證用戶名ide
,ast_ob_pwd-------AMI 服務器驗證密碼函數
,percent_rate-----服務器權重fetch
,current_threads----服務器當前併發spa
,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; }