Kategoriler
Teknik

PHP ile Kelime/Metin/Dizge İşlemleri

PHP ile kelime işlemleri yapmak için birçok fonksiyon var. Bu fonksiyonlar sayesinde değiştirme, bölme, arama, sayma, kısaltma, sınırlama, silme gibi birçok işlemi yapabiliyoruz.

PHP ile kelime işlemleri yapabilmek için birçok fonksiyon bulunmaktadır. Bunları hepsine, PHP’nin resmi sitesinden Dizge İşlevleri başlığından göz atabilirsiniz. Ben burada size, çok sık kullanılan ve ihtiyaç duyulan kelime/dizge fonksiyonlarından bahsedeceğim.

PHP ile Kelime Değiştirme İşlemleri

PHP ile bir metindeki herhangi bir kelime veya kelimeleri değiştirmek için str_replace fonksiyonu kullanılmaktadır. PHP’de kelime işlemleri oldukça kolay ve basittir.

$cumle = 'Merhaba sevgili kardeşim, nasılsın?';
$eski = 'kardeşim';
$yeni = 'dostum';

$yeniCumle = str_replace($eski, $yeni, $cumle);
// sonuç: Merhabs sevgili dostum, nasılsın?

PHP ile Birden Fazla Kelime/Metin Değiştirmek

Aynı fonksiyon ile birden fazla kelime değiştirme yapılabiliyor. Şöyle ki:

$cumle = 'Bugün Pazartesi ve yarın ilk iş kod yazmak olacak.';
$eski = ['Bugün', 'yarın'];
$yeni = ['Yarın', 'şimdi'];

$yeniCumle = str_replace($eski, $yeni, $cumle);
// sonuç: Yarın Pazartesi ve şimdi ilk iş kod yazmak olacak.

Eğer bir sözlük gibi, bütün kelimeleri değiştirmek istiyorsak strtr fonksiyonu da işimizi fazlasıyla çözecektir. Şöyle ki:

$cumle = 'Selamlar, nasılsınız? Orada havalar nasıl? Umarım iyidir. Sevgiler.';
$eskiYeni = [
    'Selamlar' => 'Merhaba',
    'havalar' => 'durumlar',
    'iyidir' => 'her şey yolundadır',
    'Sevgiler' => 'Saygılar'
];

$yeniCumle = strtr($cumle, $eskiYeni);
// sonuç: Merhaba, nasılsınız? Orada durumlar nasıl? Umarım her şey yolundadır. Saygılar.

PHP ile Kelime Bölme/Parçalama ve Birleştirme İşlemleri

PHP’de kelime işlemleri arasında en çok ihtiyaç duyulanlardan bir tanesi de kelime/metin bölme (parçalama) işlemleridir. Hemen PHP’de nasıl kelimeleri veya kelime öbeklerini parçalayıp bölebiliriz görelim:

Örneğin virgülle sıralanan bir metini, virgülleri kullanarak birbirinden ayıralım. Bunun için PHP’de explode fonksiyonunu kullanmamız gerekiyor:

$etiketler = 'PHP Dersleri, Metin İşlemleri, Kelime Bölme';
$etiketArray = explode(',', $etiketler);
// sonuç: ['PHP Dersleri', ' Metin İşlemleri', ' Kelime Bölme'];
// yani 3 öğeli bir dizemiz oldu. Fark ettiyseniz bazılarının başında boşluk var. Bunları süzelim:

// array_map fonksiyonu bir dizeyi düzenlememize, süzmemize yarar (ek bilgi)
$etiketArray = array_map(function($kelime){
    // trim fonksiyonu dizgenin sağındaki ve solundaki boşlukları siler
    return trim($kelime);
}, $etiketArray);

İkinci Örnek: Kelimeleri Bölüp/Parçalayıp Tekrar Birleştirmek

İkinci örneğimizde ise, kelimeleri bölüp, farklı şekilde tekrar parçalarını birleştireceğiz. Elimizde yine virgülle ayrılmış bir liste olsun ve bunları daha sonra <br> etiketi ile birleştirelim.

$isimler = 'Yılmaz, İlker, Deniz, Ali, Nar';
$isimlerArray = explode(',', $isimler);

// sonuç: ['Yılmaz', ' İlker', ' Deniz', ' Ali', ' Nar']
// Şimdi bu dizeyi alt alta HTML ile listeleyelim

$yeniIsimler = implode('<br>', $isimlerArray);
echo yeniIsimler;

// sonuç: Yılmaz<br> İlker<br> Deniz<br> Ali<br> Nar

substr fonksiyonu ile bölme/kesme

PHP’de substr fonksiyonu, elimizdeki dizgenin bir kısmını elde etmemize yarar. Yani bir aralık belirleyip, dizgenin o aralıklardaki kısmını elde edebiliyoruz. Bu fonksiyonunun en çok kullanıldığı yer, yazı kısaltma, metin kesme işlemleri oluyor. Örneğin bir blog yazısına "devamını okumak için tıklayın" seçeneği ekleyecekseniz, evvela substr fonksiyonu ile birkaç işlem yapmalıasınız.

UTF-8 destekli olması ve türkçe karakterlerde sıkıntı çıkarmaması açısından mb_substr fonksiyonunu kullanacağız/kullanınız.

Örneklerden ilerleyelim:

$yazi =  'Lorem lipsum dolor sit amet';
$ilk3 =  mb_substr($yazi,  0,  3);  // Lor
$son3 =  mb_substr($yazi,  -3);  // met
$ilk3haric =  mb_substr($yazi,  3);  // em lipsum dolor sit amet
$son3haric =  mb_substr($yazi,  0,  -3);  // Lorem lipsum dolor sit a

Peki gerçek hayatta bunu nasıl kullanabiliriz. Bir blog gönderisinin çok uzun olduğunu ve bunu kesmemiz gerektiğini düşünelim. Şöyle bir yol izlemeliyiz:

$yazi = 'Lorem lipsum dolor sit amet';
$yazi = substr($yazi, 0, 5);
$yazi .= '...';
$yazi .= ' <a href="#">Devamını okumak için tıklayın</a>';
echo $yazi; // Lorem... <a href="#">Devamını okumak için tıklayın</a>

PHP ile Kelime Arama

Bu örneğimizde, PHP ile metin içerisinde kelime veya öbek aramayı işleyeceğiz. Bunun için kullanacağımız strpos ve mb_strpos fonksiyonları olacak. Bu fonksiyonlar bir metin içerisinde bulunan kelimenin indisini (sayısal konumu) döndürür.

Peki neden iki fonksiyon ve bunlar arasındaki fark ne? Birincisi yani strpos fonksiyonu türkçe karakter desteklemez. Yani Türkçe karakterli bir kelimeyi aramak istediğinizde işinize yaramayacaktır ve doğru sonucu vermeyecektir. Bunun yerine UTF-8 destekli olan mb_strpos fonksiyonunu kullanmanız gerekmektedir. Biz örneklerimizde bu fonksiyonu kullanıyor olacağız.

$dizge = 'Merhaba dünya! Bugün hava güzel olacak.';
$nerede = mb_strpos($dizge, 'olacak.');

if ($nerede !== false) {
    echo "Kelime {$nerede}. indiste var!"; 
} else {
    echo "Kelime bulunamadı, taze bitmiş!";
}

// çıktı "Kelime 32. indiste var!" olacak

mb_strpos fonksiyonu, eğer aranılan kelime dizge içerisinde varsa konumunu döndürür yani integer tipinde bir sayı döndürür. Eğer yoksa, false döndürür. Bir kelimenin bir cümle içerisinde olup olmadığını sorgulamak için şunu kullanabiliriz:

if (mb_strpos('Merhaba dünya', 'evren') === false) {
    echo "Kelime yok kardeşim!";
} else {
    echo "Kelime bir yerlerde mevcut";
}

// çıktı "Kelime yok kardeşim!" olacak

Kelimeyi bulup değiştirmek içinse ilk başlıkta anlattığımız str_replace fonksiyonunu kullanabilirsiniz.


Şimdilik en çok kullanılanlardan bazılarına burada yer verdim. Bunun dışında PHP ile kelime sayma, kelime silme ve kelime yineleme gibi birçok işlev mevcut. Talep olursa bunlar hakkında da detaylı bir yazı yazabilirim. Umarım işinize yarar.

Kolay gelsin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir