какой из них следует использовать для манипулирования данными, массивом или массивом? Подобно поиску, сортировке и другим манипуляциям с массивами.
Основной тип – это array
. Это карта ключей и значений, которые можно записать, прочитать и получить доступ в цикле.
ArrayObject
– это класс, который можно расширить для создания объектов, которые ведут себя так, как если бы они были массивами. Он реализует методы, такие как count
и sort
которые позволяют обрабатывать объект, как если бы вы обрабатывали массив. Это часть SPL (стандартная библиотека PHP).
Обычно вы используете array
. Вы узнаете, когда вам нужен ArrayObject
.
С точки зрения производительности вы не заметите реальной разницы между 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
с помощью собственного итератора, методов … arrayObject в основном полезен, когда требуется сериализация.
Также вы можете создать свой собственный класс коллекции, расширив arrayObject. Затем вы можете сериализовать объект класса для передачи данных.
для простого и обычного массива операций более предпочтительным, чем arrayObject.
вы используете array
для простых (и стандартных) массивов
ArrayObject
– это класс, который можно использовать для улучшения ваших собственных классов, которые будут использоваться в качестве массивов (скажем, вашего класса Collection)
Большую часть времени массив – это все, что нужно. ArrayObject наиболее полезен при расширении для функциональных возможностей в конкретных целях.
Объект массива может быть расширен и функции переопределены. Например, ваша функция append () может форматировать число до двух знаков после запятой перед вызовом parent :: append ()