С точки зрения производительности вы не заметите реальной разницы между array
и ArayObject
.
Я запускаю простой тест. Идея состояла в том, чтобы создать массивы с использованием array () и нового 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
с помощью собственного итератора, методы ...