PHP数组和ArrayObject

Imr*_*rul 31 php arrays arrayobject

哪一个应该用来操纵数据,数组或数组对象?像搜索,排序和其他数组操作.

dre*_*ewm 31

基本类型是array.这是可以在循环中写入,读取和访问的键和值的映射.

ArrayObject是一个类,您可以扩展它以创建行为就像它们是数组一样的对象.它实现了类似的方法countsort,使您能够把一个对象像你这样对待一个数组.它是SPL(标准PHP库)的一部分.

通常你会使用array.你会知道什么时候需要ArrayObject.


小智 8

在性能方面,你不会注意到a array和a 之间的真正区别ArayObject.我做了一个简单的测试.我们的想法是使用array()和new ArrayObject创建数组,并用越来越多的值填充它们.

<?php
for($i = 0; $i < 2; $i++){
    $method = $i == 0 ? 'array' : 'ArrayObject';
    for($j = 0; $j < 7 ; $j++){
        for($k = 0; $k < 100; $k++){
            $max    = pow(10,$j);
            $array  = $method == 'array' ? array() : new ArrayObject;
            $time   = explode(' ',microtime());
            $sTime  = $time[0] + $time[1];
            for($l = 0; $l < $max; $l++){
                $array[] = 'foo ' . $i . ':' . $j . ':' . $k . ':' . $l;
            }
            $time  = explode(' ',microtime());
            $eTime = $time[0] + $time[1];
            $results[$method][$max][]    = $eTime - $sTime;
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

结果

method             lines     average (µs)    difference between methods (µs)
array                  1           2.470         -1.044
array                 10           8.452         +0.315
array                100          71.862        +10.719
array              1,000         773.826       +141.962
array             10,000       7,868.731       -675.359
array            100,000      76,954.625    -17,665.510
array          1,000,000     801,509.550    -84,356.148
ArrayObject            1           3.514         +1.044
ArrayObject           10           8.137         -0.315
ArrayObject          100          61.142        -10.719
ArrayObject        1,000         631.864       -141.962
ArrayObject       10,000       8,544.090       +675.359
ArrayObject      100,000      94,620.135    +17,665.510
ArrayObject    1,000,000     885,865.698    +84,356.148
Run Code Online (Sandbox Code Playgroud)

平均值是每种方法和每行数的100次测试的平均时间.方法之间的区别是非常微不足道的(当处理一百万行时为84微秒......)

我已多次运行此测试,并且因为差异总是微秒的问题,有时一个方法在一次测试中效率更高,然后在下一次测试期间效率更低......

选择取决于您的需求:

  • 如果你处理简单的数组,并做一个循环foreach()或计算平均值,这array是足够的,
  • 如果你需要更复杂的迭代,排序,过滤...... ArrayObject class用你自己的迭代器,方法扩展它会更容易......

  • 请指定php的版本,这是非常重要的. (8认同)
  • 在我看来,当您处理一百万行时,差异是 84 *毫秒* (84 365 *微秒*)...但在大多数情况下差异并不显着。 (2认同)