Daha
PHP'de bir diziden eleman silme
PHP kullanarak bir diziden eleman silmenin kolay bir yolu var mıdır, öyle ki foreach ($dizi)
artık o elemanı içermesin?
Bunu null
olarak ayarlamanın işe yarayacağını düşünmüştüm, ancak görünüşe göre işe yaramıyor.
2349
3
Bir dizi elemanını silmenin farklı yolları vardır ve bazıları bazı özel görevler için diğerlerinden daha kullanışlıdır.
Bir dizi elemanını sil
Eğer sadece bir dizi elemanını silmek istiyorsanız
\unset()
veya alternatif olarak\array_splice()
kullanabilirsiniz.Ayrıca, değere sahipseniz ve öğeyi silmek için anahtarı bilmiyorsanız, anahtarı almak için
\array_search()
kullanabilirsiniz.\unset()
yöntemiunset()
kullandığınızda dizi anahtarlarının değişmeyeceğini/yeniden indekslenmeyeceğini unutmayın. Anahtarları yeniden indekslemek isterseniz,
\unset()işlevinden sonra [
\array_values()`]5 kullanabilirsiniz; bu, tüm anahtarları 0'dan başlayarak sayısal numaralandırılmış anahtarlara dönüştürecektir.Kod
Çıktı
\array_splice()
yöntemiEğer
\array_splice()
kullanırsanız, anahtarlar otomatik olarak yeniden indekslenir, ancak tüm anahtarları sayısal anahtarlara dönüştürecek olan\array_values()
işlevinin aksine ilişkisel anahtarlar değişmez.Ayrıca
\array_splice()
ikinci parametre olarak anahtara değil ofsete ihtiyaç duyar!Kod
Çıktı
array_splice()
,
\unset()` gibi diziyi referans olarak alır ve bu, bu işlevlerin dönüş değerlerini diziye geri atamak istemediğiniz anlamına gelir.Birden fazla dizi elemanını silme
Birden fazla dizi elemanını silmek istiyorsanız ve
\unset()
veya\array_splice()
işlevlerini birden fazla kez çağırmak istemiyorsanız, silmek istediğiniz elemanların değerlerini veya anahtarlarını bilip bilmediğinize bağlı olarak\array_diff()
veya\array_diff_key()
işlevlerini kullanabilirsiniz.\array_diff()
yöntemiSilmek istediğiniz dizi elemanlarının değerlerini biliyorsanız,
\array_diff()
işlevini kullanabilirsiniz. Daha önce\unset()
ile olduğu gibi, dizinin anahtarlarını değiştirmez/yeniden indekslemez.Kod
Çıktı
\array_diff_key()
yöntemiSilmek istediğiniz öğelerin anahtarlarını biliyorsanız,
\array_diff_key()
işlevini kullanmak istersiniz. Burada, anahtarları değer olarak değil, ikinci parametrede anahtar olarak geçirdiğinizden emin olmalısınız. Aksi takdirde, diziyi\array_flip()
ile çevirmeniz gerekir. Ve ayrıca burada anahtarlar değişmez/yeniden indekslenmez.Kod
Çıktı
Ayrıca, aynı değere sahip birden fazla öğeyi silmek için
\unset()
veya\array_splice()
kullanmak istiyorsanız, belirli bir değer için tüm anahtarları almak ve ardından tüm öğeleri silmek için\array_keys()
kullanabilirsiniz.unset()`]1'in indekslere dokunmayacağı unutulmamalıdır; bu, dize indekslerini (hashtable olarak dizi) kullanırken beklediğiniz şeydir, ancak tamsayı indeksli dizilerle uğraşırken oldukça şaşırtıcı olabilir:
Dolayısıyla, tamsayı anahtarlarınızı normalleştirmek istiyorsanız
array_splice()
kullanılabilir. Başka bir seçenek deunset()
'den sonraarray_values()
kullanmaktır: