代码之家  ›  专栏  ›  技术社区  ›  Imrul

PHP数组和ArrayObject

  •  30
  • Imrul  · 技术社区  · 15 年前

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

    6 回复  |  直到 10 年前
        1
  •  30
  •   drewm    13 年前

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

    这个 ArrayObject 是一个类,您可以扩展该类来创建行为类似于数组的对象。它实现了如下方法 count sort 使您能够像对待数组一样对待对象。它是SPL(标准PHP库)的一部分。

    通常你会用 数组 . 你会知道什么时候需要 数组对象 .

        2
  •  8
  •   Bertrand Fourrier    10 年前

    在性能方面,您不会注意到 array 和A ArayObject . 我做了一个简单的测试。其想法是使用array()和新的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;
            }
        }
    }
    ?>
    

    结果

    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
    

    平均值是每种方法和每行数的100个测试的平均时间。 两种方法之间的差异非常小(处理一百万行时为84微秒…)

    我已经多次运行这个测试,因为差异总是微秒的问题,有时一个方法在一个测试中效率更高,在下一个测试中效率更低…

    选择将取决于您的需要:

    • 如果你处理简单的数组,做一个循环 foreach() 或者计算一个平均值, 数组 够了,
    • 如果您需要更复杂的迭代、排序、过滤……它更容易扩展 ArrayObject class 使用自己的迭代器,方法…
        3
  •  2
  •   Sadat    15 年前

    当需要序列化时,ArrayObject通常很有用。

    还可以通过扩展ArrayObject来创建自己的集合类。然后可以序列化类对象以传输数据。

    对于简单和常见的操作,数组比arrayObject更容易优先。

        4
  •  1
  •   knittl    15 年前

    你用 array 对于简单(和标准)数组

    ArrayObject 是一个类,它可以用来增强您自己的类,以用作数组(比如您的某个集合类)

        5
  •  0
  •   GZipp    15 年前

    在大多数情况下,数组就是所需要的。当为特定用途的功能扩展时,ArrayObject最有用。

        6
  •  0
  •   Anthony Scaife    11 年前

    数组对象可以扩展,函数可以覆盖。 例如,在调用parent::append()之前,您的append()函数可以将数字格式化为小数点后两位。