Fonksiyonu array_shift alternatif

2 Cevap php

Tamam, ben bu dizide içinde korunmuş tuşları gerekiyor ve ben sadece bu diziden 1 öğe kaydırmak istiyorum. Bunu yaparken aslında ben bu dizinin ilk anahtar 1 her zaman olacağını biliyorum:

// Sort it by 1st group and 1st layout.
ksort($disabled_sections);
    foreach($disabled_sections as &$grouplayout)
        ksort($grouplayout);

Temelde ben oldukça dürüst = 1 tuşuna basınız. Ve, ben array_shift büyük bir hayranı değilim bu dizi kapmak için onu ksort zorunda istemem, sadece uzun IMO alır. Başka bir yolu var mı. Belki de tüm $ disabled_sections [1], bir foreach yapmak zorunda ve sıralama olmadan bulunur dizi ve array_shift ayıklamak için bir yol. Ben istiyorum sadece [1], farklı bir dizi devre dışı $ ekleyin ve tamamen bu diziden çıkarın. Her iki diziler tutarken anahtarları oldukları şekilde yapılandırılmıştır. Teknik, hatta bunu yapmak için iyi olurdu:

$array = array();
$array = $disabled_sections[1];

Ama $ disabled_sections çıkarmak gerekiyor. Bu yaklaşım gibi bir şey kullanabilirsiniz ...

$array = array();
$array = $disabled_sections[1];
$disabled_sections -= $disabled_sections[1];

Yukarıdaki gibi bir şey bile mümkün mü?

Teşekkürler.

2 Cevap

Bu moda hiç -= operatörü varken, bir diziden o öğeyi kaldırmak için unset kullanabilirsiniz:

unset(disabled_sections[1]);

Ama bu sadece vardiya kendi versiyonunu uygulama bulunuyor. Sana array_shift() 'yavaş' olarak buluyoruz ne durumda altında merak ediyorum ve nasıl dedi yavaşlık test ediyoruz.

Sayısal diziler varsayılan sayısal sınıflandırılmaktadır - hayır ksort gereklidir. Belki gibi bir şey denemelisiniz

while($array = array_shift($group_of_arrays)) {

  // ... do stuff
}

Orada bu bir kabul cevabı olmasına rağmen; Bu genelinde vaka başkası stumbles yılında, kullanmadan bir dizinin ilk elemanını (regardless of its key, or the order of its keys) unset için bir yol array_shift olduğunu:

reset($array); // sets internal array pointer to start
unset($array[key($array)]); // key() returns key of current array element

Ben gerçi fairly alınan değerin bir ilave getiri hariç, o array_shift dahili (yani bu herhangi bir performans artışı olacağını hayal) demek ne ikna:

$element = reset($array); // also returns element
unset($array[key($array)]);
return $element;

Sadece tamamlama aşkına.