Różnica między array_push () a $ array [] =


117

W podręczniku PHP ( array_push ) mówi ...

Jeśli używasz array_push () do dodania jednego elementu do tablicy, lepiej użyć $ array [] =, ponieważ w ten sposób nie ma narzutu wywoływania funkcji.

Na przykład :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

vs

$arr[] = "stackoverflow";
print_r($arr);

Nie rozumiem, dlaczego istnieje duża różnica.


8
Jeden to wywołanie funkcji, a drugi nie. Dokładnie to, co jest wymienione w pudełku.
— KingCrunch

1
Jednym z nich jest wywołanie funkcji, jak wspomniano powyżej, co oznacza użycie pewnych zasobów do przełączania sterowania na / z wywołania funkcji (w ten sposób skutkuje przetwarzaniem narzutu). Natomiast później po prostu od razu przypisuje się nowy element do tablicy.
— Ghazanfar Mir

2
to pytanie zaoszczędziło mi dużo czasu na wciskaniu tablic :)
— RozzA

Odpowiedzi:


151

Kiedy wywołujesz funkcję w PHP (na przykład array_push()), wywołanie wiąże się z dodatkowymi kosztami, ponieważ PHP musi wyszukać odniesienie do funkcji, znaleźć jej pozycję w pamięci i wykonać dowolny kod, który zdefiniuje.

Używanie $arr[] = 'some value';nie wymaga wywołania funkcji i implementuje dodawanie bezpośrednio do struktury danych. Dlatego dodawanie dużej ilości danych jest znacznie szybsze i bardziej efektywne pod względem wykorzystania zasobów $arr[].


3
a co jeśli taki zapis "$ arr [] = 'jakaś wartość';" sprowadza się do wywołania funkcji?
— Tebe

1
@gekannt Jak to się stało? Czy masz na myśli, że „jakaś wartość” w Twoim komentarzu jest zamknięciem? To zapisze odniesienie do zamknięcia w tablicy. Jeśli masz na myśli, że „jakaś wartość” jest funkcją, która jest wywoływana, dodałaby cokolwiek ta funkcja zwraca.
— Kirkland,

@Kirkland Operatory to po prostu funkcje z alternatywną składnią w większości języków podobnych do języka C, nie jestem ekspertem od PHP, ale mogę sobie wyobrazić, że zaimplementowali operatory w ten sam sposób, ponieważ jest to dialekt C.
— Kevin

1
@Kevin: zgadzam się z tobą i jestem prawie pewien, że za alternatywną składnią kryje się funkcja, a nie ta wspomniana powyżej, jak widzę następujący komentarz w dokumentacji php: "Jeśli używasz array_push (), aby dodać jeden element do tablicy lepiej jest użyć $ array [] =, ponieważ w ten sposób nie ma narzutu wywołania funkcji. " nie mam teraz czasu, aby zobaczyć, co się za tym kryje, ponieważ wyszukiwane hasło jest nieco mylące dla wyszukiwarek :)
— jnhghy - Alexandru Jantea

Czy istnieją dowody, które $arr[] = valuesą szybsze? Próbując sobie wyobrazić, dlaczego kompilator miałby traktować kod inaczej.
— c ..

44

Możesz dodać więcej niż 1 element w jednym ujęciu do tablicy za pomocą array_push,

na przykład array_push($array_name, $element1, $element2,...)

Gdzie $ element1, $ element2, ... to elementy do dodania do tablicy.

Ale jeśli chcesz dodać tylko jeden element naraz, to preferowana powinna być inna metoda (np. Użycie $ array_name []).


Czy łączenie tych dwóch elementów w trakcie całego projektu jest złą praktyką?
— PBwebD

1
@ testing123 Absolutnie nie. Dobrą praktyką jest użycie najbardziej wydajnego dostępnego rozwiązania, chyba że poważnie ogranicza czytelność, kompatybilność itp. (Lub jeśli musisz przestrzegać pewnych wskazówek dotyczących stylu).
— Chris Kraszewski,

15

Różnica jest w poniższym wierszu: „ponieważ w ten sposób nie ma narzutu wywołania funkcji”.

array_push()zgłosi ostrzeżenie, jeśli pierwszy argument nie jest tablicą. Różni się to od $var[]zachowania podczas tworzenia nowej tablicy.


4
Nie powiedziałem, że to powód. W pytaniu zadawano różnicę i to też jest różnica
— Baig

7

Powinieneś zawsze używać, $array[]jeśli to możliwe, ponieważ zgodnie z informacją w polu nie ma narzutu na wywołanie funkcji. Jest więc nieco szybszy niż wywołanie funkcji.


4

array_push - umieść jeden lub więcej elementów na końcu tablicy

Zwróć uwagę na słowa „ jeden lub więcej elementów na końcu ”, aby to zrobić używając $arr[]musisz uzyskać maksymalny rozmiar tablicy


Re „aby to zrobić używając $ arr [], musiałbyś uzyskać maksymalny rozmiar tablicy” . Nie, mylisz się $arr[...index...] = $value;z tym, o czym tutaj dyskutujemy, czyli z tym $arr[] = $value;. Nie musisz znać rozmiaru ani tablicy, aby naciskać na koniec. Wiele elementów to po prostu wielokrotne wywołania: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
— ToolmakerSteve

2

wyjaśnij: 1. pierwszy z nich deklaruje zmienną w tablicy.

2. druga metoda array_push jest używana do wypychania łańcucha w zmiennej tablicowej.

3. na koniec wydrukuje wynik.

4. druga metoda polega na bezpośrednim zapisaniu ciągu w tablicy.

5. dane są drukowane w tablicy wartości przy użyciu metody print_r.

te dwa są takie same


1

oba są takie same, ale array_push tworzy pętlę w swoim parametrze, który jest tablicą i wykonuje $ array [] = $ element


0

Wiem, że to stara odpowiedź, ale innym może się przydać, aby wiedzieć, że kolejną różnicą między nimi jest to, że jeśli musisz dodać więcej niż 2/3 wartości na pętlę do tablicy, jej użycie jest szybsze:

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

zamiast:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

edytuj - Zapomniałem zamknąć nawias forwarunkowy


1
Zastanawiam się, jak to wypada w porównaniu z array_merge. Np for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Spekuluję, że array_push jest nadal nieco szybszy.
— ToolmakerSteve

0

Nikt nie powiedział, ale array_push tylko wypycha element do KONIEC TABLICY, gdzie $ tablica [indeks] może wstawić wartość do dowolnego podanego indeksu. Duża różnica.


Pytanie brzmiało „Różnica między array_push () a $ array [] =” to, co powiedziałem, to jedna różnica. Duży!
— Marco

1
Z całym szacunkiem się nie zgadzam. Opisujesz $array[index] = , co jest inną operacją niż $array[] = .... Pytanie podaje dwa fragmenty kodu i pyta, dlaczego byłaby między nimi znacząca różnica [wydajności] . Pytanie dosłownie oznacza $array[] = ..., który jest specyficznym idiomem php, który nie zawiera indeksu. tablica + indeks rozwiązuje inny problem, daje inny kod i to inny kompromis.
— ToolmakerSteve
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.