Bir PHP dizisinden bir elemanı anahtarına göre silmek için unset($array[$key]) kullanın. Eleman gider, diğer anahtarlar tam olarak olduğu gibi kalır ve var olmayan bir anahtarı unset etmek hata değildir.
İkinci sonuca bakın: anahtarlar artık 0, 2, 3. unset asla yeniden numaralamaz.
unset sonrasında diziyi yeniden indeksleme
Anahtarlarında boşluk olan bir liste daha sonra sorun çıkarır: bir for ($i = 0; ...) döngüsü eksik indekse çarpar ve json_encode dizi yerine bir JSON nesnesi yazar. array_values() size yeniden temiz anahtarlar verir.
array_splice ile konuma göre silme
array_splice($array, $offset, $length) $offset konumundan başlayarak $length eleman siler, anahtarları yeniden numaralar ve sildiklerini döndürür. Negatif bir başlangıç sondan sayar. Aynı çağrıda yerine yeni elemanlar da ekleyebilir.
array_splice anahtarlarla değil konumlarla çalışır: ilişkisel bir dizide sıradaki yerine göre siler ve dizge anahtarları korur. array_slice sayfası onu orijinali değiştirmeden bir parçayı kopyalayan array_slice ile karşılaştırır.
Bir elemanı değere göre silme
array_diff($array, [$value]) diziyi $value değerine eşit her eleman olmadan, geri kalanların anahtarlarını koruyarak döndürür. Yalnızca ilk eşleşmeyi silmek için anahtarını array_search ile bulun ve unset edin.
array_diff değerleri dizge olarak karşılaştırır, bu yüzden array_diff([1, "1", 2], [1]) hem tam sayıyı hem dizgeyi siler. Koşul "bu değere eşit"ten fazlası olduğunda bir geri çağırmayla array_filter kullanın.
İlk veya son elemanı silme
array_shift() ilk elemanı, array_pop() son elemanı siler. İkisi de sildikleri elemanı döndürür, bu da onları kuyruklar ve yığınlar için kullanışlı yapar.
array_shift sayısal anahtarları 0'dan yeniden numaralar. Boşluk sonda olduğu için array_pop bunu yapmak zorunda değildir.
Aynı anda birkaç anahtarı silme
unset tek bir çağrıda birkaç eleman kabul eder. Bir dizide tuttuğunuz bir anahtar listesini silmek için onu array_flip() ile ters çevirin, böylece isimler anahtar olur, sonra array_diff_key() fonksiyonuna verin.
Sık yapılan hata: değer yokken array_search ile unset
array_search hiçbir şey bulamadığında false döndürür ve dizi anahtarı olarak kullanılan false 0 olur. Bu yüzden bu satır, değer dizide olmadığında her seferinde ilk elemanı siler:
array_search sonucunu her zaman saklayın ve anahtar olarak kullanmadan önce !== false ile karşılaştırın. Düz bir if ($key) de yeterli değildir: 0 indeksindeki bir eşleşme de falsy'dir.
Sıkça Sorulan Sorular
PHP'de bir diziden değere göre eleman nasıl silerim?
Her geçişini silmek için array_diff($arr, ['value']) kullanın. Yalnızca ilkini silmek için anahtarını bulun ve bulunduğunu kontrol ederek unset edin: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.
unset sonrasında bir diziyi nasıl yeniden indekslerim?
array_values() ile sarın: $arr = array_values($arr); anahtarları 0'dan yeniden numaralar. Alternatif olarak elemanı sizin için yeniden numaralayan array_splice($arr, $index, 1) ile silin.
Bir dizinin ilk veya son elemanını nasıl silerim?
array_shift($arr) ilk elemanı siler, döndürür ve sayısal anahtarları yeniden numaralar. array_pop($arr) son elemanı siler ve döndürür.
Bir foreach döngüsü içinde bir elemanı unset edebilir miyim?
Evet. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } güvenlidir, çünkü siz orijinali değiştirirken foreach dizinin bir kopyası üzerinde dolaşır. Anahtarlardaki boşluklar kalır, bu yüzden bir listeye ihtiyacınız varsa sonrasında array_values() çağırın.
Eksik bir anahtarda unset hataya yol açar mı?
Hayır. unset($arr['missing']) hiçbir şey yapmaz ve uyarı vermez, bu yüzden önce isset ile kontrol etmeniz gerekmez.