• Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha fazla bilgi edin.

Str_Replace Değiştirmeyi Sınırlı Yapmak ve Preg_Replace

Konuyu Okuyan Kişiler (0)

ByTRiSLaSiS

webmaster.tc
Katılım
6 Ağu 2012
Mesajlar
133
Beğeniler
0
Konum
İstanbul
#1
arkadaşlar basit bir örnek vermek istedim bildiğiniz gibi str_replace ile değiştirme işlemi yapabiliriz ama bazen buna sınırda koymak isteyebiliriz.
Bunu yapmak içimn str_replace functionu ile baya uğraşmamız (Kasmamız) gerekir

örnekle pekiştirelim
PHP:
$Deger = "Ben bir cümleyim bu cümlenin  içersinde i karakterlerini değiştireceğiz";
echo str_replace("i","İ","$Deger);
gördüğünüz gibi yukarıdaki örnekte i karakterini büyük İ yaptık ama tümünü yaptık oysa sadece 2 tanesini yapmak isteyebiliriz bunun için kod aşşağıda

PHP:
$Deger = "Ben bir cümleyim bu cümlenin  içersinde i karakterlerini değiştireceğiz";
echo preg_replace('/i/',"İ",$Deger,2);
yukarıdaki örnekte sadece yaptıgımız preg_replace kullanmak ve son parametreye 2 yazmak 2 rakamı kaç adet değişiklik olacağını belirtir...

iyi çalışmalar
 

PandaMaster

webmaster.tc
Katılım
7 Ağu 2012
Mesajlar
10
Beğeniler
0
#2
Baya güzel bir anlatım olmuş, elinize sağlık. Ben de gereksiz yeni konu açmak yerine str_replace ile benzer olan strtr fonksiyonunu elimden geldiğince burada özetleyim, konu bütünlüğü olsun.

strtr($string,$değiştirilecekler,$yenideğerler) şeklindedir, isterseniz değiştirilecekler ve yeni değerler yerine bir dizi kullanıp dizi anahtarına değiştirilecek karakterleri, değer kısmına ise yeni değeri yazabilirsiniz.

str_replaceden bir kaç bariz farkı vardır. Öncelikle str_replace her yeni aramada tüm stringi baştan arar. strtr ise her işi biten karakterler için aramayı tekrar yapmaz,stringin geri kalanına bakar, şöyle özetleyecek olursak
Kod:
$string = "abc";
$aranacaklar = array('a','b','c');
$yeniDegerler = array('b','d','f');
echo str_replace($aranacaklar,$yeniDegerler,$string);
echo strtr($string,array('a'=>'b','b'=>'d','c'=>'f'));
yukardaki kodlar "abc" stringindeki a ları b ile, b leri d ile ve c leri f ile değiştirecektir ama bir farkla

Kod:
echo str_replace($aranacaklar,$yeniDegerler,$string);
Belirttiğim gibi str_replace her yeni değiştirilecek stringde bütün stringi baştan arar yani önce a ları arayacak b yapacak, sonra stringin tümünde en baştan b leri arayıp d yapacak, az önce a iken b olan karakteride okuyup d yapacaktır çünkü her yeni aramada stringe en baştan bakar. Son olarak c leri f yapacak ve çıktı olarak "ddf" verecektir.

Kod:
echo strtr($string,array('a'=>'b','b'=>'d','c'=>'f'));
strtr'nin farkı ise bir kısmı değiştirdiği zaman onunla işi biter, yani a yı b yapacak sonra artık o a ile işi bittiği için b olduğu haliylede işi bitti, b leri d yaparken bu a ile(daha doğrusu yeni b ile) uğraşmayacak yani verilen her değiştirme isteği ile 1 kere ilgilenecek, en son olarakta c leri f yapacak ve çıktı olarak: bdf verecektir. Gördüğümüz gibi zaten 1 kere değiştirilen b ye tekrardan uğramadı.

bunların dışında str_replace 4. parametre alır, bu parametre kaç kere değiştirme işlemi yapıldığını öğrenmemize yarar, strtr de yoktur bu olay. strtr değiştirmeye başlamadan önce verilen alt stringleri(aranıp değiştirilecek olanları) uzunluk sırasına göre dizer sonra değiştirmeye başlar. Ayrıca strtr str_replace e göre baya yavaştır o nedenle str_replace kullanmak daha iyidir.