explode($separator, $string) bir dizgeyi $separator her geçtiğinde böler ve parçaları bir dizi olarak döndürür. explode(',', 'apple,banana,cherry') ['apple', 'banana', 'cherry'] verir.
Ayırıcı tek bir karakter değil herhangi bir dizge olabilir: explode(' and ', 'tea and milk and sugar') da aynı şekilde çalışır. Ters işlem, yani bir diziyi yeniden bir dizgede birleştirmek, implode() fonksiyonudur.
Söz dizimi ve dönüş değeri
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
Her zaman bir dizi döndürür. Ayırıcı geçmiyorsa dizi tek elemanı olarak dizgenin tamamını tutar. Buna boş dizge de dahildir: içinde tek bir boş dizge olan bir dizi verir; bu da "döngüm boş girdide bir kez çalışıyor" hatalarının yaygın bir kaynağıdır.
Parça sayısını sınırlama
Üçüncü argüman $limit kaç parça alacağınızı değiştirir:
- Pozitif bir limit en fazla o kadar parça döndürür. Son parça ayırıcılar dahil dizgenin geri kalanını tutar.
- Negatif bir limit son
abs($limit)parça dışındaki her parçayı döndürür. 0limiti1olarak kabul edilir.
Yalnızca ilk ayırıcı önemli olduğunda doğru araç pozitif bir limittir, örneğin değerin de = içerebildiği bir key=value satırı: explode('=', 'query=a=b', 2) ['query', 'a=b'] verir. Sonraki bölümler onu bu şekilde kullanır.
Yalnızca son parçayı almak için diziyi önce bir değişkende saklayın: $parts = explode('/', $path); $file = end($parts);. end(explode('/', $path)) yazmak yine doğru değeri döndürür, ama end() argümanını referansla aldığı için PHP Notice: Only variables should be passed by reference yazdırır.
Bir dizgeyi yeni satıra göre bölme
explode("\n", $text) satır sonlarında böler. Çift tırnak kullanın: tek tırnak içinde '\n' yeni satır değil, bir ters eğik çizgi ve ardından n harfidir. Windows dosyalarından veya HTML formlarından gelen metinler satırları çoğu zaman "\r\n" ile bitirir, bu da her parçanın sonunda fazladan bir "\r" bırakır. preg_split('/\R/', $text) her tür satır sonunda böler.
Parçaları kırpma ve boş olanları atma
"red, green , ,blue" gibi kullanıcı girdisinde öğelerin etrafında boşluklar ve ortada boş bir öğe vardır. Parçaları array_map() ile trim() içinden geçirin, sonra boş dizgeleri array_filter() ile kaldırın. array_filter() orijinal anahtarları koruduğu için array_values() sonrasında anahtarları yeniden numaralar.
fn($c) => $c !== '' geri çağırması "0" dizgesini tutar. Çıplak bir array_filter($colors) onu atardı, çünkü "0" falsy'dir.
Bir dizgeyi ilişkisel diziye çevirme
Ayarlar, çerezler ve sorgu benzeri dizgeler çoğu zaman key=value çiftleri olarak saklanır. İki kez bölün: bir kez çiftler için, bir kez de her çift için 2 limitiyle, iki parçayı değişkenlere açarak (dizi ayrıştırma).
İçinde = olmayan debug gibi bir çift tek elemanlı bir dizi verir ve ayrıştırma Warning: Undefined array key 1 yazdırır. Bunu önlemek için sonucu iki elemana tamamlayın: [$key, $value] = explode('=', $pair, 2) + [1 => ''];.
Gerçek bir URL sorgu dizgesi için parse_str() bunu sizin yerinize yapar ve ayrıca %20 ve + karakterlerini çözer.
Birkaç ayırıcıya göre bölme
explode() tek bir ayırıcı alır. Virgüllerde, noktalı virgüllerde veya boşluklarda bölmek için bir karakter sınıfıyla preg_split() kullanın. PREG_SPLIT_NO_EMPTY art arda iki ayırıcının oluşturacağı boş parçaları atar.
Japonca ve diğer UTF-8 metinler
explode() baytları karşılaştırır ve UTF-8'de tam bir karakter asla başka bir karakterin baytlarının içinde yer almaz, bu yüzden Japonca metni 、 veya tam genişlikte virgül gibi bir Japonca ayırıcıda bölmek doğru çalışır.
explode, str_split ve preg_split karşılaştırması
| Fonksiyon | Nerede böler | Örnek | Sonuç |
|---|---|---|---|
explode() | sabit bir ayırıcı dizgede | explode('-', '2026-03-14') | ['2026', '03', '14'] |
str_split() | her N baytta | str_split('abcdef', 2) | ['ab', 'cd', 'ef'] |
mb_str_split() | her N karakterde | mb_str_split('日本語') | ['日', '本', '語'] |
preg_split() | bir düzenli ifadede | preg_split('/\s+/', 'a b') | ['a', 'b'] |
explode() hiçbir regex işi yapmaz, bu yüzden preg_split() fonksiyonundan daha hızlıdır ve ayırıcı sabit bir dizge olduğunda başvurulacak araçtır.
Sık yapılan hata: boş ayırıcı
Boş bir ayırıcı bir hatadır. PHP 8.0'dan beri explode('', 'abc') false döndürmek yerine bir ValueError fırlatır ve betik durur:
PHP Fatal error: Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /home/index.php:3
Bir dizgeyi karakterlere bölmek için ASCII metinlerde str_split('abc'), çok baytlı karakter içerebilecek her şeyde mb_str_split($s) kullanın.
Sıkça Sorulan Sorular
PHP'de explode() ne işe yarar?
Bir dizgeyi bir ayırıcının her geçtiği yerde böler ve parçaları bir dizi olarak döndürür: explode(',', 'a,b,c') ['a', 'b', 'c'] döndürür. Ayırıcının kendisi hiçbir parçaya dahil edilmez.
Ayırıcı bulunamazsa explode() ne döndürür?
Tek elemanlı, dizgenin tamamını içeren bir dizi: explode(',', 'apple') ['apple'] döndürür. Boş bir dizge [''] verir, yani tek bir boş dizge içeren bir dizi; bu yüzden count() 0 değil 1 döndürür.
PHP'de bir dizgeyi birden çok ayırıcıya göre nasıl bölerim?
Bir karakter sınıfıyla preg_split() kullanın: preg_split('/[,;|]/', $s) virgüllerde, noktalı virgüllerde ve dikey çizgilerde böler. Boş parçaları da atmak için limit olarak -1 ve bayrağı verin: preg_split('/[,;|]/', $s, -1, PREG_SPLIT_NO_EMPTY).
explode() ile str_split() arasındaki fark nedir?
explode() sizin seçtiğiniz bir ayırıcıda böler. str_split($s, 3) dizgeyi bayt olarak sayılan sabit uzunlukta parçalara keser. Japonca veya diğer çok baytlı metinler için karakter sayan mb_str_split($s) kullanın.
explode() neden ValueError fırlatıyor?
Çünkü ayırıcı boş bir dizgedir. PHP 8.0'dan beri explode('', $s) ValueError: explode(): Argument #1 ($separator) cannot be empty fırlatır. Bir dizgeyi tek tek karakterlere bölmek için str_split() veya mb_str_split() kullanın.