zoukankan      html  css  js  c++  java
  • PHP SPL标准库之SplFixedArray使用实例

    SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。

    看看我本机的Benchmark测试:

    ini_set('memory_limit','12800M');
     
    for($size = 10000; $size < 10000000; $size *= 4) {
      echo PHP_EOL . "Testing size: $size" . PHP_EOL;
      for($s = microtime(true), $container = Array(), $i = 0; $i < $size; $i++) $container[$i] = NULL;
      echo "Array(): " . (microtime(true) - $s) . PHP_EOL;
     
      for($s = microtime(true), $container = new SplFixedArray($size), $i = 0; $i < $size; $i++) $container[$i] = NULL;
      echo "SplArray(): " . (microtime(true) - $s) . PHP_EOL;
    }

    结果如下:

    Testing size: 10000
    Array(): 0.004000186920166
    SplArray(): 0.0019998550415039
     
    Testing size: 40000
    Array(): 0.017001152038574
    SplArray(): 0.0090007781982422
     
    Testing size: 160000
    Array(): 0.050002098083496
    SplArray(): 0.046003103256226
     
    Testing size: 640000
    Array(): 0.19701099395752
    SplArray(): 0.16700983047485
     
    Testing size: 2560000
    Array(): 0.75704312324524
    SplArray(): 0.67303895950317

    通常情况下SplFixedArray要比php array快上20%~30%,所以如果你是处理巨大数量的固定长度数组,还是强烈建议使用。
    SplFixedArray类摘要如下:

    SplFixedArray implements Iterator  , ArrayAccess  , Countable  {
      /* 方法 */
      public __construct ([ int $size = 0 ] )
      public int count ( void )
      public mixed current ( void )
      public static SplFixedArray fromArray ( array $array [, bool $save_indexes = true ] )
      public int getSize ( void )
      public int key ( void )
      public void next ( void )
      public bool offsetExists ( int $index )
      public mixed offsetGet ( int $index )
      public void offsetSet ( int $index , mixed $newval )
      public void offsetUnset ( int $index )
      public void rewind ( void )
      public int setSize ( int $size )
      public array toArray ( void )
      public bool valid ( void )
      public void __wakeup ( void )
    }

    使用SplFixedArray:

    $arr = new SplFixedArray(4);
    $arr[0] = 'php';
    $arr[1] = 1;
    $arr[3] = 'python';
     
    //遍历, $arr[2] 为null
    foreach($arr as $v) {
      echo $v . PHP_EOL;
    }
     
    //获取数组长度
    echo $arr->getSize(); //4
     
    //增加数组长度
    $arr->setSize(5);
    $arr[4] = 'new one';
     
    //捕获异常
    try{
      echo $arr[10];
    } catch (RuntimeException $e) {
      echo $e->getMessage();
    } 
  • 相关阅读:
    long和Long的区别
    C语言的变量的内存分配
    Java蓝桥杯 算法提高 九宫格
    Java实现 蓝桥杯算法提高金明的预算方案
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
  • 原文地址:https://www.cnblogs.com/onephp/p/6102394.html
Copyright © 2011-2022 走看看