奇领yy6608在线观看官网

  • <acronym id="y46sa"></acronym>
  • <kbd id="y46sa"></kbd>
  • 空間訪問權限:游客, 頭像訪問權限:自己
    [登錄]后可以瀏覽更多信息
    博客正文
    【操作】
    PHP中幾種刪除數組元素方法的效率比較

          今天優化郁達夫中學相冊-文檔管理系統。程序在列出、復制、粘貼、剪切移動文檔時,需要逐一檢測文檔的權限,剔除無權限的元素,為了減輕服務器負擔,提升用戶體驗,做了一下用unset、array_pop、array_shift和array_splice刪除數組元素效率的實驗,代碼如下。

    <?php
    function getMicrotime(){
     list($usec, $sec) = explode(' ',microtime());
     return ((float)$usec + (float)$sec);
    }

    ini_set('max_execution_time',0); 
    ini_set("memory_limit","768M");

    $num = 10000;

    $_a=array();
    for($i=0;$i<=$num;$i++){
     $_a[]='a' . $i;
    }
    $_f=$_e=$_d=$_c=$_b=$_a;

    $t1 = getMicrotime();
    for($i=$num;$i>=0;$i--){
     unset($_a[$i]);
    }

    $t2 = getMicrotime();
    for($i=$num;$i>=0;$i--){
     array_pop($_b);
    }

    $t3 = getMicrotime();
    for($i=$num;$i>=0;$i--){
     array_shift($_c);
    }

    $t4 = getMicrotime();
    for($i=0;$i<=$num;$i++){
     array_shift($_d);
    }

    $t5 = getMicrotime();
    for($i=$num;$i>=0;$i--){
     array_splice($_e,$i,1);
    }

    $t6 = getMicrotime();
    array_splice($_f,0);

    $t7 = getMicrotime();

    echo 'unset: ' . ($t2-$t1) . '<br/>';
    echo 'array_pop: ' . ($t3-$t2) . '<br/>';
    echo 'array_shift: ' . ($t4-$t3) . '<br/>';
    echo 'array_shift_ex: ' . ($t5-$t4) . '<br/>';
    echo 'array_splice: ' . ($t6-$t5) . '<br/>';
    echo 'array_splice_ex: ' . ($t7-$t6) . '<br/>';
    ?>

    snap1.jpg

    典型運行結果為

    unset: 0.0041851997375488
    array_pop: 0.0073180198669434
    array_shift: 0.84966897964478
    array_shift_ex: 0.65026998519897
    array_splice: 1.3021819591522
    array_splice_ex: 0.002079963684082

    從結果看出:

    1、unset語句是非?斓,過往我也實驗得出它的兄弟語句isset也是很快的
    2、array_pop()和array_shift()對比,說明從堆棧尾部移除元素也是很快的,這可能跟array_shift()移除元素后要重新給下標編碼有關。
    3、array_shift和array_shift_ex對比看出,循環變量累加比遞減效率高。當然試驗過程中偶爾也有array_shift_ex更慢的情況,這可能跟CPU調度有關,無典型性
    4、array_splice和array_splice_xe對比看出,批量切除數組中的區域要比一個個刪除快得多。
    5、unset\array_pop\array_splice_ex 對比,得出語句比函數快,因為,unset在循環里執行了1000次卻和array_splice_ex實驗處于同一數量級,再對比unset和array_pop就更說明問題了。

    另外注意unset不是函數,沒有返回值,手冊上說得很明白。unset刪除元素后不會重置索引

    1. http://www.ducany.com/blog.php?act=show&id=5520
    2. http://www.ducany.com/blog.php?act=show&id=5513
    3. http://www.ducany.com/blog.php?act=show&id=5511

    欄目劃分
    WEB應用程序 (33)
    桌面應用程序 (10)
    Windows操作系統 (12)
    xNix操作系統 (5)
    數據庫技術 (3)
    多媒體技術 (1)
    硬件技術 (4)
    辦公軟件 (2)
    以史為鑒 (2)
    教學反思1 (2)
    奇聞趣事 (5)
    其它 (11)
    教學反思 (4)
    電子技術 (2)
    中學生科技 (3)
     
    主人推薦
    音象定位和音箱喇叭的排步
    我國高層意向已定:制造大飛機
    “運十”悲劇
    日爾曼人
    細說百越族
    宇宙深處的秘密——星云
    [強烈推薦]中華56民族FLASH完整珍藏版
    一組漂亮的植物
      
    奇领yy6608在线观看
    友情链接:dafa888手机典版网页登录 白小姐四肖必选期期中