Array_push () ile $ array [] = arasındaki fark


117

PHP kılavuzunda ( array_push ) diyor ki ..

Diziye bir eleman eklemek için array_push () kullanırsanız, $ array [] = kullanmak daha iyidir çünkü bu şekilde bir işlevi çağırmanın ek yükü yoktur.

Örneğin :

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

vs

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

Neden büyük bir fark olduğunu anlamıyorum.


8
Biri bir işlev çağrısı, diğeri değil. Kutuda tam olarak ne bahsediliyor.
KingCrunch

1
Birincisi, yukarıda bahsedildiği gibi işlev çağrısıdır; bu, kontrolü işlev çağrısına / çağrısından değiştirmek için bazı kaynakların kullanılması anlamına gelir (bu nedenle, ek işlemle sonuçlanır). Oysa daha sonra, diziye hemen yeni eleman atamaktır.
Ghazanfar Mir

2
bu soru dizileri
zorlarken

Yanıtlar:


151

PHP'de bir işlevi çağırdığınızda (örneğin array_push()), PHP'nin işlev referansını araması, bellekteki konumunu bulması ve tanımladığı kodu çalıştırması gerektiğinden, çağrının ek yükleri vardır.

Kullanmak $arr[] = 'some value';bir işlev çağrısı gerektirmez ve eki doğrudan veri yapısına uygular. Bu nedenle, çok fazla veri eklerken kullanımı çok daha hızlı ve kaynak açısından verimli olur $arr[].


3
ya böyle bir gösterim "$ dizi [] = 'bir değer';" işlev çağrısına mı dönüyor?
Tebe

1
@gekannt Bu nasıl olur? Yorumunuzdaki 'bir değerin' kapanış olduğunu mu kastediyorsunuz? Bu, diziye kapanış referansını saklar. 'Bir değerin' çağrılan bir işlev olduğunu kastediyorsanız, bu işlevin döndürdüğü şeyi ekler.
Kirkland

@Kirkland Operatörleri, çoğu C benzeri dilde alternatif bir sözdizimine sahip işlevlerdir, PHP uzmanı değilim, ancak bir C lehçesi olduğu için operatörleri aynı şekilde uyguladıklarını hayal edebiliyorum.
Kevin

1
@Kevin: Sana katılıyorum ve alternatif sözdiziminin arkasında bir işlev olduğundan oldukça eminim ki, php belgelerinde sondaki yorumu gördüğümden yukarıda bahsedilen değil: "Bir eleman eklemek için array_push () kullanıyorsanız dizi için $ array [] = kullanmak daha iyidir çünkü bu şekilde bir işlevi çağırmanın ek yükü yoktur. " arama terimi arama motorları için biraz kafa karıştırıcı olduğundan arkasında tam olarak ne olduğunu görmek için şimdi vaktim yok :)
jnhghy - Alexandru Jantea

$arr[] = valueDaha hızlı olan herhangi bir gerçek kanıt var mı? Derleyicinin koda neden farklı davranacağını hayal etmeye çalışıyorum.
c ..

44

Array_push kullanarak bir diziye birden fazla öğe ekleyebilirsiniz,

Örneğin array_push($array_name, $element1, $element2,...)

$ Element1, $ element2, ... diziye eklenecek öğelerdir.

Fakat bir seferde sadece bir eleman eklemek istiyorsanız, diğer metot (yani $ dizi_adı [] kullanarak) tercih edilmelidir.


Bir proje boyunca gerektiğinde ikisini birleştirmek kötü bir uygulama mı?
PBwebD

1
@test123 Kesinlikle hayır. Okunabilirliği, uyumluluğu vb. Ciddi şekilde engellemediği sürece (veya belirli stil kılavuzlarına uymanız gerekiyorsa) eldeki en verimli çözümü kullanmak iyi bir uygulamadır.
Chris Kraszewski

15

Fark şu satırdadır: "çünkü bu şekilde bir işlevi çağırmanın ek yükü yoktur."

array_push()ilk bağımsız değişken bir dizi değilse bir uyarı oluşturur. Bu, $var[]yeni bir dizinin oluşturulduğu davranıştan farklıdır .


4
Bunun bir sebep olduğunu söylemedim.
Soruda

7

Her zaman $array[]mümkünse kullanmalısınız , çünkü kutuda belirtildiği gibi işlev çağrısı için ek yük yoktur. Bu nedenle, işlev çağrısından biraz daha hızlıdır.


4

array_push - Bir veya daha fazla öğeyi dizinin sonuna ittir

Bunu yapmak için, dizinin maksimum boyutunu elde etmeniz gerekecek olan " sondaki bir veya daha fazla öğe " kelimelerini not edin.$arr[]


Yeniden "$ arr [] kullanarak bunu yapmak için dizinin maksimum boyutunu elde etmeniz gerekir" . Hayır, $arr[...index...] = $value;burada tartışılanla kafa karıştırıyorsunuz , ki bu $arr[] = $value;. Sonunda zorlamak için boyutu veya diziyi bilmenize gerek yok. Birden çok öğe birden çok çağrı olabilir: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

açıklayın: 1. birincisi, dizideki değişkeni bildirir.

2. ikinci array_push yöntemi, dizeyi dizi değişkenine göndermek için kullanılır.

3. sonunda sonucu yazdıracaktır.

4. ikinci yöntem dizeyi doğrudan dizide saklamaktır.

5. veriler, print_r yöntemi kullanılarak dizi değerlerine yazdırılır.

bu ikisi aynı


1

her ikisi de aynıdır, ancak array_push, parametresinde bir dizi olan ve $ array [] = $ element gerçekleştiren bir döngü oluşturur


0

Bunun eski bir cevap olduğunu biliyorum, ancak diğerleri arasındaki diğer bir farkın, bir diziye döngü başına 2 / 3'ten fazla değer eklemeniz gerekiyorsa, kullanımın daha hızlı olduğunu bilmeleri yararlı olabilir:

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

onun yerine:

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

düzenlemek- için braket kapatmak için unuttum forkoşullu


1
Bunun array_merge ile nasıl karşılaştırıldığını merak ediyorum. Örn for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Array_push'un bundan biraz daha hızlı olduğunu tahmin ediyorum.
ToolmakerSteve

0

Kimse söylemedi, ancak array_push yalnızca bir öğeyi DİZİNİN SONuna itiyor, burada $ dizi [dizin] herhangi bir dizine bir değer ekleyebilir. Büyük fark.


Soru, "array_push () ile $ array [] =" arasındaki farktır, söylediklerim bir farktır. Büyük bir tane!
Marco

1
Saygılarımla katılmıyorum. Sen açıklayan $array[index] = bir olan farklı operasyon daha $array[] = .... Soru, iki parça kod verir ve aralarında neden önemli bir [performans] farkı olduğunu sorar . Soru kelimenin tam anlamıyla $array[] = ..., belirli bir php deyimi olan ve bir dizin içermeyen anlamına gelir . dizi + dizin, farklı bir sorunu çözer, farklı kod üretir ve farklı bir değiş tokuştur.
ToolmakerSteve
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.