在操作数据时,应该使用哪种,数组 (Array) 还是数组对象 (Array Object)?比如搜索、排序和其他数组操作。
在操作数据时,应该使用哪种,数组 (Array) 还是数组对象 (Array Object)?比如搜索、排序和其他数组操作。
基本类型是 array
。它是一个键值对的映射,可以进行写入、读取和循环访问。
ArrayObject
是一个类,你可以扩展它来创建行为像数组一样的对象。它实现了像 count
和 sort
这样的方法,使你能够像处理数组一样处理对象。它是标准 PHP 库 (SPL) 的一部分。
通常情况下,你会使用 array
。当你需要使用 ArrayObject
时,你会知道。
就性能而言,在array
和ArrayObject
之间,您不会注意到实际的差异。
我进行了一个简单的测试。想法是使用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
当需要进行序列化时,arrayObject非常有用。
您还可以通过扩展arrayObject来创建自己的集合类。然后,您可以将类对象序列化以传输数据。
对于简单和常见的操作,使用数组比arrayObject更可取。
你可以使用array
来创建简单(和标准)的数组
ArrayObject
是一个类,可以用来增强你自己的类以便像数组一样使用(比如你自己的某个集合类)
数组对象可以被扩展和覆盖函数。 例如,您的append()函数在调用parent::append()之前可以将数字格式化为两位小数。
大多数情况下,数组就足够了。当需要在特定用途中扩展功能时,ArrayObject非常有用。