PHP Array und Arrayobject
-
05-07-2019 - |
Frage
die man soll Manipulieren von Daten, Array oder Array-Objekt verwendet werden? Wie suchen, sortieren und andere Array Manipulationen.
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, einarray
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 ()