Perbedaan antara array_push () dan $ array [] =

117

Dalam manual PHP, ( array_push ) mengatakan ..

Jika Anda menggunakan array_push () untuk menambahkan satu elemen ke array, lebih baik menggunakan $ array [] = karena dengan cara itu tidak ada overhead untuk memanggil fungsi.

Sebagai contoh :

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

vs.

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

Saya tidak mengerti mengapa ada perbedaan besar.

l2aelba
sumber
8
Salah satunya adalah panggilan fungsi, yang lainnya tidak. Persis seperti yang disebutkan di dalam kotak.
KingCrunch
1
Salah satunya adalah pemanggilan fungsi sebagaimana disebutkan di atas yang berarti penggunaan beberapa sumber daya untuk mengalihkan kendali ke / dari pemanggilan fungsi (sehingga mengakibatkan pemrosesan overhead). Padahal, nanti cukup menugaskan elemen baru ke dalam array langsung.
Ghazanfar Mir
2
pertanyaan ini menghemat banyak waktu saya mendorong ke array :)
RozzA

Jawaban:

151

Saat Anda memanggil suatu fungsi dalam PHP (seperti array_push()), ada biaya tambahan untuk panggilan tersebut, karena PHP harus mencari referensi fungsi, menemukan posisinya di memori, dan menjalankan kode apa pun yang ditentukannya.

Penggunaan $arr[] = 'some value';tidak memerlukan pemanggilan fungsi, dan mengimplementasikan penambahan langsung ke dalam struktur data. Jadi, saat menambahkan banyak data, ini jauh lebih cepat dan hemat sumber daya untuk digunakan $arr[].

BenM
sumber
3
bagaimana jika notasi seperti itu "$ arr [] = 'some value';" intinya adalah panggilan fungsi?
Tebe
1
@Gekannt Bagaimana itu bisa terjadi? Apakah yang Anda maksud jika 'nilai tertentu' dalam komentar Anda adalah penutup? Itu akan menyimpan referensi closure ke dalam array. Jika Anda bermaksud bahwa 'beberapa nilai' adalah fungsi yang dipanggil, itu akan menambahkan apa pun yang dikembalikan fungsi itu.
Kirkland
Operator @kirkland hanyalah fungsi dengan sintaks alternatif di sebagian besar bahasa mirip-C, saya bukan ahli PHP, tapi saya bisa membayangkan mereka mengimplementasikan operator dengan cara yang sama karena ini adalah dialek C.
Kevin
1
@Kevin: Anda saya setuju dengan Anda dan saya cukup yakin ada fungsi di balik sintaks alternatif itu bukan yang disebutkan di atas seperti yang saya lihat komentar berikut di dokumentasi php: "Jika Anda menggunakan array_push () untuk menambahkan satu elemen ke array lebih baik menggunakan $ array [] = karena dengan cara itu tidak ada biaya tambahan untuk memanggil fungsi. " tidak punya waktu sekarang untuk melihat dengan tepat apa yang ada di baliknya karena istilah pencarian agak membingungkan untuk mesin pencari :)
jnhghy - Alexandru Jantea
Adakah bukti nyata yang $arr[] = valuelebih cepat? Mencoba membayangkan mengapa kompilator memperlakukan kode secara berbeda.
c ..
44

Anda dapat menambahkan lebih dari 1 elemen dalam satu tembakan ke array menggunakan array_push,

misalnya array_push($array_name, $element1, $element2,...)

Di mana $ element1, $ element2, ... adalah elemen yang akan ditambahkan ke array.

Tetapi jika Anda ingin menambahkan hanya satu elemen pada satu waktu, maka metode lain (yaitu menggunakan $ array_name []) harus lebih disukai.

Sujit Singh
sumber
Apakah praktik yang buruk untuk menggabungkan keduanya sesuai kebutuhan di seluruh proyek?
PBwebD
1
@ testing123 Sama sekali tidak. Merupakan praktik yang baik untuk menggunakan solusi paling efisien yang tersedia, kecuali sangat melumpuhkan keterbacaan, kompatibilitas, dll. (Atau jika Anda perlu mematuhi panduan gaya tertentu).
Chris Kraszewski
15

Perbedaannya ada pada baris di bawah ini menjadi "karena dengan cara itu tidak ada overhead pemanggilan suatu fungsi."

array_push()akan memunculkan peringatan jika argumen pertama bukan sebuah array. Ini berbeda dari $var[]perilaku di mana array baru dibuat.

Baig
sumber
4
Saya tidak mengatakan bahwa itu adalah alasan. Dalam pertanyaan, perbedaan ditanyakan dan ini juga perbedaan
Baig
7

Anda harus selalu menggunakan $array[]jika memungkinkan karena kotak menyatakan tidak ada overhead untuk pemanggilan fungsi. Jadi, ini sedikit lebih cepat daripada pemanggilan fungsi.

Benjamin Paap
sumber
4

array_push - Dorong satu atau lebih elemen ke akhir array

Catat kata-kata " satu atau lebih elemen di akhir " untuk melakukan itu menggunakan $arr[]Anda harus mendapatkan ukuran maksimum dari array

ianace
sumber
Kembali "untuk melakukannya dengan menggunakan $ arr [] Anda harus mendapatkan ukuran maksimal dari array" . Tidak, Anda bingung $arr[...index...] = $value;dengan apa yang dibahas di sini, yaitu $arr[] = $value;. Tidak perlu mengetahui ukuran atau lariknya, untuk mendorong di akhir. Beberapa elemen hanya akan menjadi beberapa panggilan: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve
2

jelaskan: 1. yang pertama mendeklarasikan variabel dalam array.

2. metode array_push kedua digunakan untuk mendorong string ke dalam variabel array.

3. akhirnya akan mencetak hasilnya.

4. metode kedua adalah langsung menyimpan string dalam array.

5. data dicetak dalam nilai larik menggunakan metode print_r.

keduanya sama

Saravana Kumar
sumber
1

keduanya sama, tetapi array_push membuat loop di parameternya yang merupakan array dan melakukan $ array [] = $ elemen

Sara
sumber
0

Saya tahu ini adalah jawaban lama tetapi mungkin bermanfaat bagi orang lain untuk mengetahui bahwa perbedaan lain antara keduanya adalah jika Anda harus menambahkan lebih dari 2/3 nilai per loop ke array, lebih cepat digunakan:

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

dari pada:

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

edit- Lupa menutup braket untuk forkondisional

Antoniu Livadariu
sumber
1
Saya ingin tahu bagaimana ini dibandingkan dengan array_merge. Mis for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Saya berspekulasi bahwa array_push masih sedikit lebih cepat dari itu.
ToolmakerSteve
0

Tidak ada yang mengatakan, tetapi array_push hanya mendorong elemen ke AKHIR ARRAY, di mana $ array [index] dapat memasukkan nilai pada indeks yang diberikan. Perbedaan besar.

Marco
sumber
Pertanyaannya adalah "Perbedaan antara array_push () dan $ array [] =" apa yang saya katakan adalah satu perbedaan. Yang besar!
Marco
1
Saya dengan hormat tidak setuju. Anda menjelaskan $array[index] = , yang merupakan operasi berbeda dari$array[] = ... . Pertanyaan tersebut memberikan dua bagian kode, dan menanyakan mengapa akan ada perbedaan [kinerja] yang signifikan di antara keduanya. Pertanyaan secara harfiah berarti $array[] = ..., yang merupakan idiom php tertentu, yang tidak melibatkan indeks. array + index memecahkan masalah yang berbeda, menghasilkan kode yang berbeda, dan merupakan pertukaran yang berbeda.
ToolmakerSteve