PHP-массив и ArrayObject

какой из них следует использовать для манипулирования данными, массивом или массивом? Подобно поиску, сортировке и другим манипуляциям с массивами.

Основной тип – это 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 ()