33

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

4

6 回答 6

39

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

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

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

于 2009-09-09T15:36:30.390 回答
8

在性能方面,您不会注意到 anarray和 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;
        }
    }
}
?>

结果

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()或计算平均值,array则足够了,
  • 如果你需要更复杂的迭代、排序、过滤……ArrayObject class用你自己的迭代器、方法来扩展更容易……
于 2014-11-25T14:13:55.137 回答
2

当需要序列化时,arrayObject 最有用。

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

对于简单和通常的操作,array 比 arrayObject 更受欢迎。

于 2009-09-09T17:31:06.117 回答
1

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

ArrayObject是一个类,可用于增强您自己的类以用作数组(例如您的一些集合类)

于 2009-09-09T15:40:16.157 回答
0

大多数情况下,只需要一个数组即可。ArrayObject 在扩展特定用途的功能时最有用。

于 2009-09-09T15:33:16.480 回答
0

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

于 2013-08-30T01:32:52.947 回答