首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Array和ArrayObject

PHP Array和ArrayObject
EN

Stack Overflow用户
提问于 2009-09-09 15:28:06
回答 6查看 25.1K关注 0票数 33

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-09 15:36:30

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

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

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

票数 39
EN

Stack Overflow用户

发布于 2014-11-25 22:13:55

就性能而言,您不会注意到arrayArayObject之间的真正区别。我运行一个简单的测试。这个想法是使用ArrayObject ()和新的数组创建数组,并用越来越多的值填充它们。

代码语言:javascript
复制
<?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;
        }
    }
}
?>

结果

代码语言:javascript
复制
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会更容易……
票数 8
EN

Stack Overflow用户

发布于 2009-09-09 17:31:06

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1400404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档