Türkiye'nin ilk Cross-Platform OldSchool MOBİL & PC 1-99 Sunucusu Lamira2 6 Kasım'da Açılıyor! Büyük Açılışı Kaçırma HEMEN TIKLA!
str_replace($search, $replace, $subject) fonksiyonu, $subject metni içerisinde geçen bütün $search ifadelerini $replace ile değiştirerek yeni bir metin oluşturur. Örnek olarak str_replace('world', 'PHP', 'Hello world') komutu çalıştığında çıktı "Hello PHP" olacaktır.
PHP:
<?php
$text = 'I like cats. cats are great.';
$new = str_replace('cats', 'dogs', $text);
echo $new, "\n";
echo $text, "\n"; // the original is unchanged
Bu fonksiyon mevcut değişkeninizin içeriğini doğrudan güncellemez, bunun yerine değiştirilmiş yeni bir metin üretir. Yapılan değişikliği korumak adına çıktıyı bir değişkene kaydetmeniz gerekir:
$text = str_replace(...).Kullanım biçimi (Söz dizimi)
PHP:
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
Fonksiyona iletilen ilk üç parametre metin (dizge) olabileceği gibi dizi türünde de tanımlanabilir. Eğer
$subject parametresine bir dizi aktarılırsa, işlem dizideki her bir eleman için ayrı ayrı uygulanır ve yine aynı anahtar yapısına sahip bir dizi elde edilir. Örneğin str_replace('.txt', '.md', ['a.txt', 'b.txt']) ifadesi bize ['a.md', 'b.md'] sonucunu verir. Arama yapılırken büyük-küçük harf ayrımına dikkat edilir ve karmaşık desenler yerine sadece sabit metinler aranır. Düzenli ifadeler ve desen eşleşmeleri gerekiyorsa preg_replace() tercih edilmelidir.Aynı anda birden fazla metni değiştirme
$search ve $replace parametrelerine dizi gönderebilirsiniz. Bu durumda ilk dizideki her bir arama terimi, ikinci dizide karşılık gelen sıra numaralı değerle değiştirilir. Şayet $replace için dizi yerine tek bir metin tanımı yapılırsa, aranan tüm değerlerin yerine bu sabit metin yazılır. Bu yöntem, belirli karakterleri topluca temizlemek için oldukça pratiktir.
PHP:
<?php
$template = 'Hello {name}, your order {id} has shipped.';
echo str_replace(['{name}', '{id}'], ['Ada', '#1042'], $template), "\n";
// One replacement for every search value: remove punctuation
echo str_replace(['.', ',', '!', '?'], '', 'Hi, there! Ready? Yes.'), "\n";
// Fewer replacements than searches: the missing ones are ""
echo str_replace(['a', 'b', 'c'], ['1'], 'abcabc'), "\n";
Sıralama uyuşmazlıkları ve strtr() alternatifi
str_replace() fonksiyonuna dizi verildiğinde değişim işlemleri sırasıyla yürütülür. Bu durum, sonraki aşamada aranacak bir kelimenin, önceden değiştirilmiş yeni metnin içinde yer alması halinde istenmeyen çakışmalara yol açabilir. Dizi parametresiyle kullanılan strtr() fonksiyonu ise tüm süreci tek hamlede tamamlar; en uzun anahtarlara öncelik verir ve işlediği metin bölümlerine tekrar müdahale etmez.
PHP:
<?php
$s = 'apple banana';
// apple -> banana, then every banana (including the new one) -> cherry
echo str_replace(['apple', 'banana'], ['banana', 'cherry'], $s), "\n";
// One pass: each original word is replaced once
echo strtr($s, ['apple' => 'banana', 'banana' => 'cherry']), "\n";
Şablon metinlerindeki yer tutucuları doldururken veya değerlerin çakışabileceği karmaşık değişimlerde
strtr() kullanmak daha güvenlidir.Yapılan değişikliklerin sayısını alma
Dördüncü parametre, işlem sırasında kaç adet metin değişimi yapıldığını öğrenmek için kullanılır. Buraya bir değişken adı tanımladığınızda PHP gerçekleşen değişim adedini bu değişkene kaydeder.
PHP:
<?php
$text = 'one fish, two fish, red fish, blue fish';
$result = str_replace('fish', 'cat', $text, $count);
echo $result, "\n";
echo "Replaced $count times\n";
str_ireplace ile harf boyutuna duyarsız değişim
Harf büyüklüğüne veya küçüklüğüne bakılmaksızın değişim yapmak için
str_ireplace() kullanılır. Bu fonksiyon da benzer parametrelerle çalışır ancak arama yaparken harf boyutunu önemsemez. Belirlediğiniz yeni değer ise aynen yazıldığı haliyle metne eklenir.
PHP:
<?php
$text = 'PHP, php and Php';
echo str_replace('php', 'Python', $text), "\n";
echo str_ireplace('php', 'Python', $text), "\n";
str_ireplace() yalnızca standart ASCII karakterlerde harf boyutu eşitliği sağlayabilir. Özel karakterler, aksanlı harfler veya Kiril alfabesi içeren metinlerde harf boyutunu yok sayan bir değişim gerekirse, i ve u parametreleriyle preg_replace() kullanılması önerilir.Sadece ilk eşleşen metni değiştirme
str_replace() yapısı gereği bulunan tüm ifadeleri değiştirir. Yalnızca karşılaşılan ilk metni değiştirmek istiyorsanız, strpos() yardımıyla konumu tespit edip substr_replace() ile ilgili kısmı güncelleyebilirsiniz:
PHP:
<?php
function replaceFirst(string $search, string $replace, string $subject): string
{
$pos = strpos($subject, $search);
if ($pos === false) {
return $subject;
}
return substr_replace($subject, $replace, $pos, strlen($search));
}
echo replaceFirst('a', 'A', 'banana'), "\n";
// The same with a regex and a limit of 1
echo preg_replace('/' . preg_quote('a', '/') . '/', 'A', 'banana', 1), "\n";
Metindeki son eşleşmeyi değiştirmek için ise
strpos() yerine strrpos() fonksiyonundan yararlanabilirsiniz.Gereksiz boşlukları ve karakterleri temizleme
Değiştirilecek değer kısmına boş metin vermek ilgili karakterlerin silinmesini sağlar. Metin düzenleme işlemlerinde sıklıkla satır başları veya boşluklar temizlenir. Japonca metinlerde standart
" " aramasıyla tespit edilemeyen tam genişlikte boşluk karakterlerinin ( , U+3000) bulunabileceği unutulmamalıdır.
PHP:
<?php
$text = "line one\r\nline two\nline three";
echo str_replace(["\r\n", "\n", "\r"], ' ', $text), "\n";
$phone = '090 1234 5678';
echo str_replace(' ', '', $phone), "\n";
$name = '山田 太郎';
echo str_replace(' ', ' ', $name), "\n"; // full-width space to normal space
Hazırladığınız dizide
"\r\n" tanımını "\n" ve "\r" ifadelerinden daha önce yazmalısınız. Böylece Windows işletim sistemindeki satır sonu karakterleri çift boşluk yerine tek bir boşluğa dönüşür.Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 4
- Görüntüleme
- 23
- Cevaplar
- 2
- Görüntüleme
- 16
- Cevaplar
- 5
- Görüntüleme
- 24
- Cevaplar
- 2
- Görüntüleme
- 22
- Cevaplar
- 4
- Görüntüleme
- 26
