PHP Array e ArrayObject
-
05-07-2019 - |
Domanda
quale dovrebbe essere usato per manipolare dati, array o oggetti array? Come la ricerca, l'ordinamento e altre manipolazioni dell'array.
Soluzione
Il tipo base è array
. Questa è una mappa di chiavi e valori su cui è possibile scrivere, leggere e accedere in sequenza.
ArrayObject
è una classe che è possibile estendere per creare oggetti che si comportano come se fossero matrici. Implementa metodi come count
e sort
che ti consentono di trattare un oggetto come se dovessi trattare un array. Fa parte di SPL (Standard PHP Library).
In genere si usa array
. Saprai quando hai bisogno di ArrayObject
.
Altri suggerimenti
In termini di prestazioni, non noterai una vera differenza tra un array
e un ArayObject
.
Eseguo un semplice test. L'idea era di creare array usando array () e il nuovo ArrayObject e riempirli con un numero crescente di valori.
<?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;
}
}
}
?>
Risultati
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
La media è il tempo medio dei 100 test per ciascun metodo e ciascun numero di righe. La differenza tra i metodi è abbastanza insignificante (84 microsecondi quando si ha a che fare con un milione di righe ...)
Ho eseguito questo test molte volte e poiché le differenze sono sempre una questione di microsecondi, a volte un metodo è più efficiente durante un test, quindi meno efficiente durante il test successivo ...
La scelta dipenderà dalle tue esigenze:
- se hai a che fare con semplici array e fai un ciclo come
foreach ()
o calcoli una media, unarray
è abbastanza, - se hai bisogno di iterazioni, ordinamenti, filtri più complessi, ... è più facile espandere la
classe ArrayObject
con il tuo iteratore, i metodi ...
arrayObject è utile soprattutto quando è necessaria la serializzazione.
Inoltre puoi creare la tua classe di raccolta estendendo arrayObject. Quindi è possibile serializzare l'oggetto classe per trasferire i dati.
per operazioni semplici e normali l'array è più preferibile di arrayObject.
usi array
per array semplici (e standard)
ArrayObject
è una classe, che può essere utilizzata per migliorare le proprie Classi da utilizzare come array (ad esempio alcune Classi di raccolta)
Il più delle volte un array è tutto ciò che serve. ArrayObject è molto utile se esteso per funzionalità in usi particolari.
L'oggetto array può essere esteso e le funzioni possono essere nascoste. Ad esempio, la funzione append () potrebbe formattare un numero con due cifre decimali prima di chiamare parent :: append ()