Którego należy użyć do manipulowania obiektem danych, macierzy lub macierzy? Podobnie jak w przypadku wyszukiwania, sortowania i innych operacji na tablicach.PHP Array i ArrayObject
Odpowiedz
Podstawowy typ to array
. Jest to mapa kluczy i wartości, które można zapisać, odczytać i uzyskać do nich dostęp w pętli.
The ArrayObject
to klasa, którą można rozszerzyć, aby tworzyć obiekty, które zachowują się tak, jakby były tablicami. Implementuje takie metody, jak count
i sort
, które umożliwiają traktowanie obiektu takiego, jak gdyby traktowałbyś tablicę. Jest częścią SPL (Standardowej Biblioteki PHP).
Zazwyczaj używa się array
. Dowiesz się, kiedy potrzebujesz ArrayObject
.
W większości przypadków tablica jest wszystkim, czego potrzeba. ArrayObject jest najbardziej przydatny, gdy zostanie rozszerzony o funkcje w konkretnych zastosowaniach.
arrayObject jest najbardziej przydatna, gdy potrzebna jest serializacja.
Można również utworzyć własną klasę kolekcji poprzez rozszerzenie arrayObject. Następnie możesz serializować obiekt klasy, aby przesłać dane.
dla prostej i zwykłej tablicy operacyjnej jest bardziej korzystny niż arrayObject.
Obiekt Array może być rozszerzony, a funkcje są niedostępne. Na przykład, funkcja Twój append() może sformatować liczbę do dwóch miejsc po przecinku przed wywołaniem parent :: append()
W perspektywie wydajności, nie będzie zauważyć różnicę pomiędzy array
i ArayObject
. Prowadzę prosty test. Chodziło o to, aby utworzyć tablice za pomocą array() i nowego ArrayObject, i wypełnić je rosnącą liczbą wartości.
<?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;
}
}
}
?>
Wyniki
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
Średnia wynosi średni czas 100 testów dla każdej metody i każdej liczby linii. Różnica między metodami jest dość nieznaczna (84 mikrosekundy, gdy mamy do czynienia z milionem wierszy ...)
Przeprowadziłem ten test wiele razy, a ponieważ różnice są zawsze kwestią mikrosekund, czasami metoda jest bardziej wydajny podczas jednego testu, a następnie mniej wydajny podczas następnego testu ...
wybór będzie zależał od potrzeb:
- jeśli masz do czynienia z prostych tablic i zrobić pętlę jak
foreach()
lub obliczenia średnia,array
wystarczy, - jeśli potrzebujesz bardziej złożonych iteracji, sortowania, filtrowania, ... łatwiej jest rozwinąć
ArrayObject class
z własnym iteratorem, metodami ...
- 1. ArrayObject, getIterator();
- 2. PHP array vs PHP Constant?
- 3. Czy obiekt ArrayObject w PHP ma odpowiednik in_array?
- 4. PHP: Co oznacza `array (i $ this)`?
- 5. PHP unpack array
- 6. Proste PHP random array
- 7. PHP Array unikalne wartości
- 8. autouzupełnianie z php array
- 9. PHP Convert Array Keys
- 10. array - brak pamięci w php
- 11. Macierze PHP - nawiasy kwadratowe a nawiasy klamrowe ($ array [$ i] vs $ array {$ i})
- 12. PHP Array na równoważnik String
- 13. PHP Array to Json Object
- 14. PHP Array połączenie nie działa
- 15. PHP array vs [] w deklaracji metody i zmiennej
- 16. knockoutjs Jak zdobyć wybraną opcję arrayObject
- 17. PHP Santising/Validating Array of Integers
- 18. Jak przeglądać Array JSON w PHP
- 19. PHP Argumenty funkcji: Array obiektów danej klasy
- 20. PHP Match Array against Partial String
- 21. Array-Merge na tablicy asocjacyjnej w PHP
- 22. Array push jako pierwszy indeks PHP
- 23. LoopJ AndroidAsyncHttp i JSON POST ARRAY
- 24. PHP Tablica stdClass, Jak zdobyć dane?
- 25. Dlaczego std :: array :: front i std :: array :: back not noexcept?
- 26. Znaczenie `@ $ array` i innych konstrukcji
- 27. Android string-array to Array
- 28. Jak mogę sprawić, aby ArrayIterator lub ArrayObject działały z implode?
- 29. Array, które mogą być accesed używając array [ 'name'] w C#
- 30. Podział NSString na Array
Czy masz przykład tego, co chcesz zrobić? – willoller
Potrzebuję wyszukiwania, sortowania i innych skomplikowanych manipulacji za pomocą Array w zasadzie do korzystania z niego w algorytmie. Muszę więc wiedzieć, który z nich jest lepszy i szybszy. – Imrul