Apa yang lebih baik untuk digunakan dalam PHP, $ array [] = $ value atau array_push ($ array, $ value)?

113

Apa yang lebih baik digunakan dalam PHP untuk menambahkan anggota array,

$array[] = $value;

atau

array_push($array, $value);

?

Meskipun manual mengatakan Anda lebih baik menghindari panggilan fungsi, saya juga membaca $array[]jauh lebih lambat daripada array_push(). Apa sajakah klarifikasi atau tolok ukur?

alex
sumber
2
$ myArray [] = 123; Ini akan lebih cepat dari fungsi array_push. Ini secara langsung menambahkan nilai ke dalam array itu. Fungsi memiliki tumpukan terpisah untuk variabel itu. dan mungkin ada pernyataan itu di dalam fungsi itu.
sganesh

Jawaban:

150

Tidak ada tolok ukur, tetapi saya pribadi merasa $array[]lebih bersih untuk dilihat, dan sejujurnya membelah rambut selama milidetik cukup tidak relevan kecuali Anda berencana untuk menambahkan ratusan ribu string ke array Anda.

Edit : Jalankan kode ini:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;

Penggunaan metode pertama $array[]hampir 50% lebih cepat dari yang kedua.

Beberapa hasil benchmark:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]

Ini seharusnya tidak mengherankan, karena manual PHP mencatat ini:

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.

Cara pengungkapannya, saya tidak akan terkejut jika array_pushlebih efisien saat menambahkan beberapa nilai. EDIT : Karena penasaran, melakukan beberapa pengujian lebih lanjut, dan bahkan untuk sejumlah besar tambahan, $array[]panggilan individu lebih cepat daripada satu panggilan besar array_push. Menarik.

Paolo Bergantino
sumber
Saya hanya selalu lebih suka mengetahui cara mana yang paling cepat sehingga ketika saatnya tiba saya akan diminta untuk membuat situs dengan lalu lintas tinggi, saya akan memiliki beberapa wawasan. Terima kasih atas jawabannya.
alex
10
Pengoptimalan mikro seperti ini jarang sepadan dengan usaha. Jika Anda menulisnya dari awal, lakukan dengan cara yang paling masuk akal, dan baru kemudian, jika agak lambat untuk menghasilkan halaman, buat profil. Peluang untuk sepenuhnya harus mengubah sesuatu seperti ini untuk mempercepat sedikit.
Alister Bulman
4
Hanya untuk memastikan, karena kode tampaknya tidak cocok dengan output, saya memverifikasi bahwa $array[]memang jauh lebih cepat, 300ms vs. 2000ms untuk tugas 1 juta di komputer saya. Namun, menambahkan 20 item sekaligus dalam array_push itu secepat 20 $array[] =detik.
Elle
5
@AlisterBulman Pengoptimalan mikro tidak sebanding dengan usaha jika Anda berpikir untuk kembali ke seluruh basis kode Anda dan 'mengoptimalkannya'. Akan tetapi, jika Anda memiliki beberapa cara berbeda untuk melakukan hal yang sama dan menyadari bahwa satu cara lebih baik (walaupun hanya sedikit) daripada yang lain, Anda dapat membiasakan diri untuk menggunakan cara tersebut. Mengapa Anda tidak melakukan ini?
Okonomiyaki3000
2
@AlisterBulman Saya sangat tidak setuju, atau setidaknya sebagian, jika Anda tahu lebih baik, menulis lebih baik , tetapi tidak berusaha keras untuk mencari kemungkinan optimasi mikro ...
jave.web
42

Kegunaan utama dari array_push () adalah Anda bisa mendorong beberapa nilai ke akhir array.

Dikatakan dalam dokumentasi :

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.

Mengilhami
sumber
29

Dari dokumen php untukarray_push :

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

Benediktus Cohen
sumber
Lucu bagaimana jawaban Anda pertama kali, tetapi kurang memilih.
T. Woody
21

Kata di jalan adalah bahwa [] lebih cepat karena tidak ada overhead untuk pemanggilan fungsi. Plus, tidak ada yang benar-benar menyukai fungsi array PHP ...

"Apakah itu ... tumpukan jerami, jarum .... atau tumpukan jerami jarum ... ah, sialan ... [] ="

typeoneerror
sumber
7
Hah? Fungsi array PHP luar biasa.
cletus
13
Secara fungsional mereka memang luar biasa, ya, tapi yang dia maksud adalah skema penamaan yang tidak konsisten.
ryeguy
2
Anda harus mengaktifkan petunjuk parameter di IDE Anda. Tapi saya setuju, beberapa konsistensi akan sangat bagus.
Pim Jager
4
Saya setuju dengan ini. Tidak ada konsistensi baik dalam skema penamaan (x_y atau xy atau y_x ...) maupun dalam logika parameter (berikan objek target terlebih dahulu, terakhir, antara array, string, dan regexps, semoga berhasil menemukan aturan umum!).
e2-e4
3
FWIW, saya suka konvensi penamaan jarum / tumpukan jerami dan mudah diingat, karena urutannya sama dengan frasa: "seperti menemukan jarum (1) di tumpukan jerami (2)"
rybo111
8

Satu perbedaan adalah Anda dapat memanggil array_push () dengan lebih dari dua parameter, yaitu Anda dapat mendorong lebih dari satu elemen sekaligus ke sebuah array.

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);

cetakan 1,2,3,4

VolkerK
sumber
2

Deklarasi $ myarray [] sederhana akan lebih cepat karena Anda hanya mendorong item ke tumpukan item karena kurangnya overhead yang akan dibawa oleh suatu fungsi.

Tom Hallam
sumber
2

Karena " array_push " adalah sebuah fungsi dan dipanggil beberapa kali saat berada di dalam loop sehingga ia akan mengalokasikan memori ke dalam stack. Tetapi ketika kita menggunakan $ array [] = $ value maka kita hanya memberikan nilai ke array.

Vinod Kirte
sumber
1

Yang kedua adalah panggilan fungsi sehingga umumnya harus lebih lambat daripada menggunakan fitur akses array inti. Tapi saya pikir bahkan satu query database dalam skrip Anda akan melebihi 1.000.000 panggilan ke array_push().

Stefan Gehrig
sumber
0

Meskipun pertanyaannya lebih banyak tentang kinerja, orang akan bertanya-tanya apakah ini praktik yang baik untuk digunakan array_pushatau $arr[].

Fungsi tersebut mungkin berarti baris yang lebih kecil untuk beberapa nilai:

// 1 line:
array_push($arr, "Bob", "Steve");
// versus 2 lines:
$arr[] = "Bob";
$arr[] = "Steve";

Namun , array_push...

  • tidak dapat menerima kunci array
  • melanggar konvensi penamaan jarum / tumpukan jerami
  • lebih lambat, seperti yang telah dibahas

Saya akan bertahan dengan $arr[].

rybo111
sumber
0

Saya hanya ingin menambahkan: int array_push(...)mengembalikan jumlah elemen baru dalam array ( php doc ). yang bisa berguna dan lebih ringkas daripada $myArray[] = ...; $total = count($myArray);.

Juga array_push(...)berarti ketika variabel digunakan sebagai tumpukan.

Jean-Luc Barat
sumber