php輪流排序,每隔一定的時間輪流進行位置排序,輪詢的熱門排行榜:function dataPollingInterval()

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   資料   

/** @名稱: php ,對數組每隔一定的時間(自設定時間)來輪流進行位置排序,輪詢的熱門排行榜。                精確到指定的秒 或 分鐘 或 小時 或 天 ,對資料列表進行輪排。* @參數: (array)$list 順序數組,傳入需要進行輪排的數組;* @參數: (time string)$polling_time  間隔時間 , 輪排間隔的時間。可以是:數字 + 秒、分、時、天(英文單詞);* @參數: (int)$polling_number 每次輪流換排多少條資料;* @傳回值: array | false , 如果排序成功返回array,否則異常情況返回false.** @author: 王奇疏 , QQ: 876635409*/function dataPollingInterval( $list ,  $polling_time=‘10 second minute hour day‘ , $polling_number=1 ) {    // 規劃輪詢間隔時間的參數:    $interval = false;    // 判斷$polling_time 的類型是 秒、分、小時、天 中的哪1種。    $arg = array(         ‘s‘=>1  ,            // 秒        ‘m‘=>60 ,            // 分= 60 sec        ‘h‘ =>3600 ,        // 時= 3600 sec        ‘d‘ => 86400 ,    // 天= 86400 sec    );    // 判斷間隔時間的類型,並計算間隔時間    foreach ( $arg as $k => $v ) {        if ( false !== stripos( $polling_time , $k ) ) {            $interval = intval( $polling_time ) * $v;            break;        }    }        // 判斷間隔時間    if( !is_int( $interval ) ){          return false;    }    // 從今年開始的秒數    $this_year_begin_second = strtotime( date( ‘Y-01-01 01:00:01‘ , time() ) );        // 當前秒數 - 今年開始的秒數,得到今年到目前為止的秒數。    $polling_time = time() - $this_year_begin_second;    // 從今年到目前為止的秒數,計算得到當前輪數    $len = count( $list ); // 總長度    $start_index = intval( $polling_time / $interval );    $start_index = $polling_number * $start_index  % $len; // 輪排數量 * 輪數 , 取餘 總數量。    $res = array(  );    // 將輪數 指向到數組的索引,然後從這個索引開始接著往下迴圈遍曆。    for ( $i=0; $i < $len ; ++$i ) {        $index = $i + $start_index; // 索引的變化是根據時間來變                // 當遍曆索引超過數組的最大下標時,         if ( $index >= $len ) {            $index = $index - $len ;        }        $res[] = $list[ $index ]; // 存入結果    }    return $res;}    

 

資料處理例子:
--------------------------------------------
 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1 2

 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

-------------------------------------------
下一秒

 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1 2 3 4

 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
==============================

 

【完整例子】:

<?php    date_default_timezone_set( ‘prc‘ );    if ( isset( $_GET[‘go‘] ) ) {        // 數組資料:        $list = range( 1 , 100 );                 // 按時間輪流排序:對list列表每5秒進行一次位置輪詢排序,每次排10條。        $list = dataPollingInterval( $list , ‘2 sec‘ , 3 ) ;                // 輸出排序好的資料        $out = ‘‘;        foreach ( $list as $k=>$v ) {            $out .= ‘ ‘.$v;            if ( $k % 20 == 19 ) {                $out .= ‘<br /><br />‘;            }        }        echo ‘<pre>‘;print_r( $out );echo ‘</pre>‘;        exit;    }        /*    * @名稱: 對數組每隔一定的時間(自設定時間)來輪流進行位置排序,輪詢的熱門排行榜。                    精確到指定的秒 或 分鐘 或 小時 或 天 ,對資料列表進行輪排。    * @參數: (array)$list 順序數組,傳入需要進行輪排的數組;    * @參數: (time string)$polling_time  間隔時間 , 輪排間隔的時間。可以是:數字 + 秒、分、時、天(英文單詞);    * @參數: (int)$polling_number 每次輪流換排多少條資料;    * @傳回值: array | false , 如果排序成功返回array,否則異常情況返回false.    *    * @author: 王奇疏 , QQ: 876635409    */    function dataPollingInterval( $list ,  $polling_time=‘10 second minute hour day‘ , $polling_number=1 ) {        // 規劃輪詢間隔時間的參數:        $interval = false;        // 判斷$polling_time 的類型是 秒、分、小時、天 中的哪1種。        $arg = array(             ‘s‘=>1  ,            // 秒            ‘m‘=>60 ,            // 分= 60 sec            ‘h‘ =>3600 ,        // 時= 3600 sec            ‘d‘ => 86400 ,    // 天= 86400 sec        );        // 判斷間隔時間的類型,並計算間隔時間        foreach ( $arg as $k => $v ) {            if ( false !== stripos( $polling_time , $k ) ) {                $interval = intval( $polling_time ) * $v;                break;            }        }                // 判斷間隔時間        if( !is_int( $interval ) ){              return false;        }        // 從今年開始的秒數        $this_year_begin_second = strtotime( date( ‘Y-01-01 01:00:01‘ , time() ) );                // 當前秒數 - 今年開始的秒數,得到今年到目前為止的秒數。        $polling_time = time() - $this_year_begin_second;        // 從今年到目前為止的秒數,計算得到當前輪數        $len = count( $list ); // 總長度        $start_index = intval( $polling_time / $interval );        $start_index = $polling_number * $start_index  % $len; // 輪排數量 * 輪數 , 取餘 總數量。        $res = array(  );        // 將輪數 指向到數組的索引,然後從這個索引開始接著往下迴圈遍曆。        for ( $i=0; $i < $len ; ++$i ) {            $index = $i + $start_index; // 索引的變化是根據時間來變                        // 當遍曆索引超過數組的最大下標時,             if ( $index >= $len ) {                $index = $index - $len ;            }            $res[] = $list[ $index ]; // 存入結果        }        return $res;    }    ?><!DOCTYPE><html><head>    <title>php輪流排序</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>    <div id="containner" class=""></div></body></html><script type="text/javascript"><!--    var $ = function ( id ) {        return typeof id == "string" ? document.getElementById( id ) : id;    }    // ajax方法:ajax(  url , function(){ ... } , if_post_param );    function ajax(B,A){this.bindFunction=function(E,D){return function(){return E.apply(D,[D])}};this.stateChange=function(D){if(this.request.readyState==4){this.callbackFunction(this.request.responseText)}};this.getRequest=function(){if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP")}else{if(window.XMLHttpRequest){return new XMLHttpRequest()}}return false};this.postBody=(arguments[2]||"");this.callbackFunction=A;this.url=B;this.request=this.getRequest();if(this.request){var C=this.request;C.onreadystatechange=this.bindFunction(this.stateChange,this);if(this.postBody!==""){C.open("POST",B,true);C.setRequestHeader("X-Requested-With","XMLHttpRequest");C.setRequestHeader("Content-type","application/x-www-form-urlencoded");C.setRequestHeader("Connection","close")}else{C.open("GET",B,true)}C.send(this.postBody)}};    window.setInterval(         function (  ) {            ajax(                 ‘?go=1‘ ,                function ( text ) {                    $( "containner" ).innerHTML = text;                }            );        } ,        1000    );//--></script>

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.