Frage

die man soll Manipulieren von Daten, Array oder Array-Objekt verwendet werden? Wie suchen, sortieren und andere Array Manipulationen.

War es hilfreich?

Lösung

Der Grundtyp ist array. Dies ist eine Karte von Schlüsseln und Werten, die geschrieben werden können, lesen und in einer Schleife abgerufen.

Die ArrayObject ist eine Klasse, die Sie Objekte erstellen erweitern können, die sich verhalten, als ob sie Arrays waren. Es implementiert Methoden wie count und sort, die es Ihnen ermöglichen, ein Objekt zu behandeln, wie Sie ein Array behandeln würde. Es ist Teil der SPL (Standard PHP Library).

Normalerweise würden Sie array verwenden. Sie wissen, wann Sie ArrayObject benötigen.

Andere Tipps

Im Begriff der Leistung, werden Sie nicht einen wirklichen Unterschied zwischen einem array und einem ArayObject bemerken. Ich betreibe einen einfachen Test. Die Idee war, Arrays zu erstellen mit array () und neuer Arrayobject, und füllt sie mit einer steigenden Anzahl von Werten.

<?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;
        }
    }
}
?>

Ergebnisse

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

Die durchschnittliche ist die durchschnittliche Zeit der 100-Tests für jedes Verfahren und jede Anzahl von Zeilen. Der Unterschied zwischen dem Verfahren ist ziemlich unbedeutend (84 Mikrosekunden, wenn Sie mit einer Million Zeilen beschäftigen ...)

Ich habe diesen Test viele Male ausgeführt, und weil die Unterschiede immer eine Frage von Mikrosekunden, manchmal ein Verfahren effizienter während eines Tests ist, dann weniger effizient beim nächsten Test ...

Die Wahl wird von Ihren Bedürfnissen ab:

  • Wenn Sie mit einfachen Arrays umgehen, und eine Schleife wie foreach() tun oder einen Durchschnitt berechnen, ein array ist völlig ausreichend,
  • Wenn Sie komplexere Iterationen benötigen, Sortieren, Filtern, ... es ist einfacher, die ArrayObject class mit Ihrem eigenen Iterator zu erweitern, Methoden ...

Arrayobject ist vor allem dann nützlich, wenn die Serialisierung erforderlich ist.

Sie können auch Ihre eigene Sammlung Klasse erstellen, indem Arrayobject erstreckt. Dann können Sie Ihr Klassenobjekt zur Übertragung von Daten serialisiert werden soll.

für den einfachen und gewöhnlichen Betrieb Array ist prefferable als Arrayobject.

Sie verwenden array für einfache (und Standard) Arrays

ArrayObject eine Klasse, die verwendet werden können Ihre eigenen Klassen zu verbessern als Arrays (sagen wir einige Sammlung Klasse von Ihnen) verwendet werden sollen

Die meiste Zeit ein Array ist alles, was benötigt wird. Arrayobject ist besonders nützlich, wenn für die Funktionalität insbesondere Anwendungen erweitert.

Array Objekt könnte erweitert werden und Funktionen außer Kraft gesetzt. Zum Beispiel Ihrer append () Funktion könnte eine Zahl auf zwei Dezimalstellen formatiert vor dem Aufruf von parent :: append ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top