Domanda

quale dovrebbe essere usato per manipolare dati, array o oggetti array? Come la ricerca, l'ordinamento e altre manipolazioni dell'array.

È stato utile?

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, un array è 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 ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top