2009-11-17 13 views

cevap

8

şeye bağlı:

$a1 = array('a' => 1, 'b' => 2, 'c' => 3); 
unset($a1['b']); 
// array('a' => 1, 'c' => 3) 

$a2 = array(1, 2, 3); 
unset($a2[1]); 
// array(0 => 1, 2 => 3) 
// note the missing index 1 

// solution 1 for numeric arrays 
$a3 = array(1, 2, 3); 
array_splice($a3, 1, 1); 
// array(0 => 1, 1 => 3) 
// index is now continous 

// solution 2 for numeric arrays 
$a4 = array(1, 2, 3); 
unset($a4[1]); 
$a4 = array_values($a4); 
// array(0 => 1, 1 => 3) 
// index is now continous 

Genellikle unset() hashtables (telli-endeksli diziler) için güvenli olmakla birlikte, sürekli sayısal indeksler güvenmek varsa kullanmak gerekecek ya array_splice() veya unset() bir arada ve array_values().

+1

Neden array_splice yerine array_values ​​ile birleştirilmiş unset'i kullandınız? – John

+4

@John: Tek bir diziden birkaç öğeyi kaldırmak istediğinizde düşünebileceğim bir senaryo. 'Unset()' -way ile değerleri değiştirmek zorunda kalmadan değerleri kaldırabilirsiniz - eğer indekslemeyi normalleştirmek için array_values ​​() ile diziyi çalıştırırsanız. Bu, array_splice() 'i birkaç kez kullanmaktan daha temiz ve hızlıdır. –

9

yaygın yolu: manual

unset($arr[5]); // This removes the element from the array 

filtrelenmiş şekillerine göre

:

filtreleme diziler bakmak array_filter() fonksiyonu da vardır

$numeric_data = array_filter($data, "is_numeric"); 

sıralı dizin,

$numeric_data = array_values($numeric_data); 

Referanslar Duruma göre
PHP – Delete selected items from an array

+0

Peter, teşekkürler. – lovespring

5

kullanabilirsiniz almak için.

$a = array('a','b','c', 'd'); 
array_splice($a, 2, 1); 
var_dump($a); 

Çıktı: endeksler boşlukları neden olmadan bir öğe kaldırmak istiyorsanız, array_splice kullanmak gerekir

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "d" 
} 

çalışabilir ayarlanmazsa kullanarak, ama bu kesintili endeks ile sonuçlanır.

$a = array('a','b','c', 'd'); 
unset($a[2]); 
var_dump($a); 

Çıktı:

Gördüğünüz gibi
array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [3]=> 
    string(1) "d" 
} 

, sayısıdır üst sınır bir ölçüsü olarak 1 - count (a $) kullanarak diziyi sürekli tekrarlanması, bu bazen bir sorun olabilir Şimdi 3, ancak son elemanın indeksi de 3'tür.

Benim tavsiyem, sayısal indeksli diziler için array_splice kullanmak ve sayısal olmayan indekslerle sadece diziler için (diziler için) unset kullanmaktır.

+0

alternatif olarak 'unset ($ a [2]); $ a = array_values ​​($ a); ' – nickf

İlgili konular