Menu

PHP explode(): Bir Dizgeyi Diziye Bölme

explode(',', $string) bir dizgeyi her virgülde böler ve parçaları bir dizi olarak döndürür. limit parametresini, yeni satıra göre bölmeyi, parçaları kırpmayı ve str_split ya da preg_split ne zaman daha iyi araç olduğunu öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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.
  • 0 limiti 1 olarak 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ı

FonksiyonNerede bölerÖrnekSonuç
explode()sabit bir ayırıcı dizgedeexplode('-', '2026-03-14')['2026', '03', '14']
str_split()her N bayttastr_split('abcdef', 2)['ab', 'cd', 'ef']
mb_str_split()her N karakterdemb_str_split('日本語')['日', '本', '語']
preg_split()bir düzenli ifadedepreg_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.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA