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