substr($string, $offset, $length) $string dizgesinin $offset konumunda (0'dan sayılır) başlayan ve $length karakter uzunluğundaki parçasını döndürür. substr('Hello world', 0, 5) "Hello" döndürür. Sona kadar her şeyi almak için $length değerini yazmayın.
substr() baytları sayar. İngilizce metinde bu karakterlerle aynıdır, ama Japonca, Çince, emoji veya aksanlı harflerde değildir. Bunlar için aşağıda gösterilen mb_substr() kullanın.
Söz dizimi
substr(string $string, int $offset, ?int $length = null): string
$offsetnereden başlanacağıdır.0ilk karakterdir. Negatif bir değer sondan sayar.$lengthkaç bayt alınacağıdır (düz ASCII metinde bir bayt bir karakterdir). Negatif bir değer sondan o kadarını dışarıda bırakır.null(ya da hiç yazmamak) "sona kadar" demektir.
Negatif başlangıç ve uzunluk: sondan çalışma
Negatif bir $offset saymaya dizgenin sonundan başlar, yani -1 son karakterdir. Negatif bir $length sondan o kadar karakter önce durur.
substr($s, 0, -1) son karakteri silmenin olağan yoludur, örneğin bir döngünün bıraktığı sondaki virgülü.
İlk veya son karakteri alma
Tek bir bayt için dizgeyi doğrudan da indeksleyebilirsiniz. $s[0] ilk karakterdir ve PHP 7.1'den beri $s[-1] son karakterdir.
Var olmayan bir konumu indekslemek bir uyarı yazdırır, substr() ise yalnızca boş bir dizge döndürür. Dizge boş olabiliyorsa substr() tercih edin.
Aralık dışı: false değil boş dizge
$offset dizgenin sonundan sonraysa substr() PHP 8'de "" döndürür. PHP 7'de false döndürürdü, bu yüzden === false kontrol eden eski kodlar artık çalışmaz.
Japonca metin: mb_substr kullanın
UTF-8 kana ve yaygın kanji karakterlerini 3'er baytta saklar (𠮷 gibi nadir kanji ve emoji 4 bayt kaplar). substr() baytları saydığı için substr('こんにちは', 0, 3) yalnızca こ döndürür ve bir karakter sınırına denk gelmeyen bir uzunluk bir karakteri ikiye bölüp bozuk metin üretir. mb_substr() aynı argümanları alır ve karakterleri sayar.
Aynısı emoji ve é gibi aksanlı harfler için de geçerlidir. Karakter sayıları mb_strlen() kullanır; bayt ile karakter farkı için strlen() sayfasına bakın.
Metni üç noktayla kısaltma
Bir liste veya kart için uzun bir başlığı kesmek substr() fonksiyonunun en yaygın gerçek kullanımıdır. Japonca bir başlığın asla bir karakterin ortasından kesilmemesi için mb_substr() kullanın ve ... değerini yalnızca gerçekten bir şeyi kısalttığınızda ekleyin.
mb_strimwidth($text, 0, $width, '...') aynısını görüntü genişliğine göre yapar; tam genişlikte bir Japonca karakter 2 sütun, bir Latin harfi 1 sütun sayılır. Sabit genişlikli düzenlere uygundur.
substr_count ile bir alt dizgeyi sayma
substr_count($haystack, $needle) $needle değerinin kaç kez geçtiğini döndürür. Büyük küçük harfe duyarlıdır ve iç içe geçen eşleşmeleri saymaz.
strpos ile substr: bir karakterden önceki veya sonraki metin
Konumunu önceden bilmediğiniz bir karakterde, örneğin bir e-posta adresindeki @ işaretinde kesmek için substr() fonksiyonunu strpos() ile birleştirin:
Sonucunu kullanmadan önce strpos() fonksiyonunun false döndürmediğini kontrol edin: karakter yoksa false uyarı olmadan 0 kabul edilir, bu yüzden substr('nobody', 0, $at) "", substr('nobody', $at + 1) ise "obody" döndürür.
Sıkça Sorulan Sorular
PHP'de bir dizgenin son karakterlerini nasıl alırım?
Negatif bir başlangıç kullanın: substr($s, -3) son 3 karakteri döndürür. Japonca veya diğer çok baytlı karakterler içerebilecek metinler için mb_substr($s, -3) kullanın.
substr ile mb_substr arasındaki fark nedir?
substr() baytları, mb_substr() karakterleri sayar. UTF-8'de kana ve yaygın kanji karakterleri 3'er bayt kaplar, bu yüzden substr('日本語', 0, 2) bir karakteri ikiye böler, mb_substr('日本語', 0, 2) ise "日本" döndürür.
Başlangıç dizgenin sonundan sonraysa substr ne döndürür?
Boş bir dizge. PHP 8.0'dan beri substr('abc', 5) "" döndürür; PHP 7 false döndürürdü.
PHP'de bir dizgenin son karakterini nasıl silerim?
substr($s, 0, -1) son bayt dışındaki her şeyi döndürür. Çok baytlı metinler için mb_substr($s, 0, -1), yalnızca belirli bir sondaki karakteri silmek istiyorsanız rtrim($s, ',') kullanın.
PHP'de bir alt dizgenin kaç kez geçtiğini nasıl sayarım?
substr_count($haystack, $needle): substr_count('banana', 'an') 2 döndürür. Büyük küçük harfe duyarlıdır ve iç içe geçen eşleşmeleri saymaz.