PHP dizi öğeyi silmek için en iyi yolu nedir?

3 Cevap php

Bana diziden bir öğeyi silmek için yol söyleyebilir misiniz? Eğer bu iyi düşünüyor musunuz?

3 Cevap

Duruma göre değişir:

$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

Genel olarak unset() is safe for hashtables (string-indexed arrays), but if you have to rely on continous numeric indexes you'll have to use either array_splice() or a combination of unset() ve array_values() .

The common way:

manual göre

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

The filtered way:

Filtreleme Dizilerin dikkat çekmek için array_filter() fonksiyonu da vardır

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

Sıralı bir dizin almak için kullanabilirsiniz

$numeric_data = array_values($numeric_data);

References
PHP – Delete selected items from an array

Duruma göre değişir. Indekslerde boşlukları neden olmadan bir öğeyi kaldırmak istiyorsanız, array_splice kullanmanız gerekir:

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

Çıktı:

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

Unset kullanarak çalışmak, ama bu sürekli olmayan endeksinde sonuçları olabilir. Eğer sayısı ($ a) kullanılarak dizinin üzerinde yineleme Bu bazen bir sorun olabilir - üst sınır bir ölçüsü olarak 1:

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

Çıktı:

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

Gördüğünüz gibi, sayısı şimdi 3 olduğunu, ancak son elemanın endeksi de 3'tür.

Benim tavsiye sayısal indeksler ile diziler için array_splice kullanmak ve sayısal olmayan indeksler sadece (gerçekten sözlükler) diziler için unset kullanmak nedenle.