zoukankan      html  css  js  c++  java
  • php 数组函数性能测试

    先看看下面代码运行的结果:

    图一:

    图二:

    图三:

    结论:

    1. 数组越大越难排序
    2. 先array_keys,再foreach 几乎是单个foreach的2倍时间,且foreach遍历几乎不受数组中存储大小有关,只与索引的个数有关
    3. array_slice效率很高,但是尽量用小数组切割
    4. 二维数组中的第二维也是影响排序函数的

    所以:

    • foreach不用array_keys
    • asort,arsort尽量只对一个一维数组操作

    附上代码:

    echo '<table>';
    $a = $b = array();
    
    $t1 = microtime(true);
    for($alength = 0; $alength < 10; $alength++) {
        $a[] = $alength;
    }
    $t2 = microtime(true);
    echo "<tr><td>生成一个长度为".$alength."数组:</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    asort($a);
    $t2 = microtime(true);
    echo "<tr><td>长度为".$alength."的数组asort排序:</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    for($i = 0; $i<100000; $i++) {
        $b[] = $a;
    }
    $t2 = microtime(true);
    echo "<tr><td>".$i."个数据,每个数据中的数组长度为前面生成的数组,其长度是".$alength.":</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    $bb = array_keys($b);
    asort($bb);
    $t2 = microtime(true);
    echo "<tr><td>先array_keys后的,".$i."个数据asort长度为".$alength."数组排序:</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    arsort($b);
    $t2 = microtime(true);
    echo "<tr><td>".$i."个数据arsort长度为".$alength."数组排序:</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    foreach ($b as $k=>$v) {
        
    }
    $t2 = microtime(true);
    echo "<tr><td>".$i."个数据长度为".$alength."数组foreach遍历:</td><td>".($t2 - $t1)."</td></tr>";
    
    $t1 = microtime(true);
    $kk = array_keys($b);
    foreach ($kk as $k=>$v) {
        
    }
    $t2 = microtime(true);
    echo "<tr><td>".$i."个数据长度为".$alength."数组,先array_keys得到索引,再对索引foreach遍历:</td><td>".($t2 - $t1)."</td></tr>";
    echo '<br />';
    
    $t1 = microtime(true);
    $c = array_slice($b,100,100);
    $t2 = microtime(true);
    echo "<tr><td>".$i."个数据长度为".$alength."数组array_slice切割:</td><td>".($t2 - $t1)."</td></tr>";
    
    echo '<table>';
  • 相关阅读:
    Activex控件的IObjectSafety接口问题
    用delphi制作无界面的activex控件
    Delphi发布ActiveX控件 制作CAB包 数字签名相关
    Delphi创建ActiveX控件,实现安全接口及无界面代码
    Delphi 开发ActiveX控件(非ActiveForm)
    利用Delphi编写IE扩展
    解决IE9下交通银行网上银行无法输入密码的问题
    Delphi中COM自动化对象中使用事件
    Delphi不注册COM直接使用ActiveX控件并绑定事件
    C#中使用 SendMessage 向非顶端窗体发送组合键
  • 原文地址:https://www.cnblogs.com/beceo/p/2577068.html
Copyright © 2011-2022 走看看