【发布时间】:2010-11-26 21:21:08
【问题描述】:
应该使用哪一个来操作数据,数组还是数组对象? 像搜索、排序和其他数组操作。
【问题讨论】:
-
你有你想做什么的例子吗?
-
我需要使用 Array 进行搜索、排序和其他复杂的操作,以便在算法中使用它。所以我需要知道哪个更好更快。
标签: php arrays arrayobject
应该使用哪一个来操作数据,数组还是数组对象? 像搜索、排序和其他数组操作。
【问题讨论】:
标签: php arrays arrayobject
基本类型是array。这是一个可以循环写入、读取和访问的键和值的映射。
ArrayObject 是一个类,您可以扩展该类以创建行为就像数组一样的对象。它实现了像count 和sort 这样的方法,使您能够像对待数组一样对待对象。它是 SPL(标准 PHP 库)的一部分。
通常你会使用array。你会知道什么时候需要ArrayObject。
【讨论】:
就性能而言,您不会注意到array 和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 会更容易......【讨论】:
arrayObject 在需要序列化时最有用。
你也可以通过扩展arrayObject来创建你自己的集合类。然后你可以序列化你的类对象来传输数据。
对于简单常用的操作,array 比 arrayObject 更受欢迎。
【讨论】:
您将array 用于简单(和标准)数组
ArrayObject 是一个类,可用于增强您自己的类以用作数组(比如您的一些集合类)
【讨论】:
大多数情况下,只需要一个数组即可。 ArrayObject 在扩展特定用途的功能时最有用。
【讨论】:
可以扩展数组对象并覆盖函数。 例如,您的 append() 函数可以在调用 parent::append() 之前将数字格式化为两位小数
【讨论】: