PHP数组和ArrayObject

36

在操作数据时,应该使用哪种,数组 (Array) 还是数组对象 (Array Object)?比如搜索、排序和其他数组操作。


你有想要做的示例吗? - willoller
我需要使用数组进行搜索、排序和其他复杂的操作,主要是为了在算法中使用。因此,我需要知道哪种方法更好、更快。 - Imrul
6个回答

40

基本类型是 array。它是一个键值对的映射,可以进行写入、读取和循环访问。

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

通常情况下,你会使用 array。当你需要使用 ArrayObject 时,你会知道。


9

就性能而言,在arrayArrayObject之间,您不会注意到实际的差异。

我进行了一个简单的测试。想法是使用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()这样的循环或计算平均值,则使用数组就足够了, - 如果您需要更复杂的迭代、排序、过滤等操作,则可以通过扩展ArrayObject类来实现自己的迭代器、方法等。

11
请您指明 PHP 的版本,这非常重要。 - Astery
2
在处理一百万行数据时,看起来差别是84毫秒(或者84 365微秒)……虽然在大多数情况下这个差别并不显著。 - Erk

3

当需要进行序列化时,arrayObject非常有用。

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

对于简单和常见的操作,使用数组比arrayObject更可取。


1

你可以使用array来创建简单(和标准)的数组

ArrayObject是一个类,可以用来增强你自己的类以便像数组一样使用(比如你自己的某个集合类)


ArrayObject不是一个抽象类。 - GZipp

0

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


0

大多数情况下,数组就足够了。当需要在特定用途中扩展功能时,ArrayObject非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接