PHP-Array und ArrayObject

Lesezeit: 3 Minuten

Benutzer-Avatar
Imrul

Welches sollte verwendet werden, um Daten zu manipulieren, Array oder Array-Objekt? Wie Suche, Sortierung und andere Array-Manipulationen.

  • Haben Sie ein Beispiel dafür, was Sie tun möchten?

    – willoller

    9. September 2009 um 15:32 Uhr

  • Ich muss suchen, sortieren und andere komplizierte Manipulationen mit Array durchführen, um es im Grunde im Algorithmus zu verwenden. Also muss ich wissen, welches besser und schneller ist.

    – Imrul

    9. September 2009 um 17:38 Uhr

Benutzer-Avatar
zogm

Der Grundtyp ist array. Dies ist eine Karte von Schlüsseln und Werten, die in einer Schleife beschrieben, gelesen und aufgerufen werden können.

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

Normalerweise würden Sie verwenden array. Sie werden wissen, wann Sie es brauchen ArrayObject.

In Bezug auf die Leistung werden Sie keinen wirklichen Unterschied zwischen einem bemerken array und ein ArayObject. Ich führe einen einfachen Test durch. Die Idee war, Arrays mit array() und new ArrayObject zu erstellen und sie mit einer steigenden Anzahl von Werten zu füllen.

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

Der Durchschnitt ist die durchschnittliche Zeit der 100 Tests für jede Methode und jede Anzahl von Zeilen. Der Unterschied zwischen den Methoden ist ziemlich unbedeutend (84 Mikrosekunden bei einer Million Zeilen …)

Ich habe diesen Test viele Male durchgeführt, und da die Unterschiede immer eine Frage von Mikrosekunden sind, ist manchmal eine Methode bei einem Test effizienter, dann beim nächsten Test weniger effizient …

Die Wahl hängt von Ihren Bedürfnissen ab:

  • wenn Sie mit einfachen Arrays umgehen und eine Schleife wie ausführen foreach() oder berechnen Sie einen Durchschnitt, an array reicht völlig aus,
  • Wenn Sie komplexere Iterationen, Sortierungen, Filterungen usw. benötigen, ist es einfacher, die zu erweitern ArrayObject class mit eigenem Iterator, Methoden…

  • Bitte geben Sie die Version von PHP an, es ist ziemlich wichtig.

    – Aster

    3. Januar 2015 um 17:00 Uhr

  • Sieht für mich so aus, als wäre die Differenz 84 Millisekunden (84 365 Mikrosekunden), wenn Sie es mit einer Million Zeilen zu tun haben … nicht, dass der Unterschied in den meisten Fällen signifikant wäre.

    – Erk

    24. Juni 2017 um 20:57 Uhr

arrayObject ist vor allem dann nützlich, wenn eine Serialisierung erforderlich ist.

Sie können auch Ihre eigene Sammlungsklasse erstellen, indem Sie arrayObject erweitern. Dann können Sie Ihr Klassenobjekt serialisieren, um Daten zu übertragen.

für einfache und übliche Operationen ist array besser als arrayObject.

Benutzer-Avatar
gestrickt

Sie nutzen array für einfache (und Standard-) Arrays

ArrayObject ist eine Klasse, die verwendet werden kann, um Ihre eigenen Klassen zu erweitern, damit sie als Arrays verwendet werden können (z. B. eine Sammlungsklasse von Ihnen).

Meistens reicht ein Array aus. ArrayObject ist am nützlichsten, wenn es für bestimmte Funktionen erweitert wird.

Array-Objekt könnte erweitert und Funktionen überschrieben werden. Beispielsweise könnte Ihre Funktion append() eine Zahl auf zwei Dezimalstellen formatieren, bevor parent::append() aufgerufen wird.

1186970cookie-checkPHP-Array und ArrayObject

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy