PHP, bir dizenin belirli bir alt dizeyle başlayıp başlamadığını belirlemek için birkaç verimli yöntem sunar. Bu makalede, substr()
, strpos()
ve strncmp()
fonksiyonlarını kullanarak üç yaygın yaklaşımı inceleyeceğiz. Her yöntemin kendine özgü güçlü ve zayıf yönleri vardır ve bu da onları farklı senaryolar için uygun hale getirir.
İçindekiler
- Başlangıç Alt Dizisini Kontrol Etmek için
substr()
Kullanımı - Başlangıç Alt Dizisini Kontrol Etmek için
strpos()
Kullanımı - Başlangıç Alt Dizisini Kontrol Etmek için
strncmp()
Kullanımı - Doğru Yöntemi Seçme
Başlangıç Alt Dizisini Kontrol Etmek için substr()
Kullanımı
substr()
fonksiyonu, bir dizenin bir bölümünü ayıklar. Bir dizenin başlangıcının hedef alt dizimizle eşleşip eşleşmediğini kontrol etmek için bunu kullanabiliriz. Bu yaklaşım basit ve anlaşılması kolaydır.
<?php
function startsWithSubstr(string $haystack, string $needle): bool {
return substr($haystack, 0, strlen($needle)) === $needle;
}
$string = "Bu bir test dizisidir.";
$substring = "Bu";
if (startsWithSubstr($string, $substring)) {
echo "'$string', '$substring' ile başlıyorn";
} else {
echo "'$string', '$substring' ile başlamıyorn";
}
$string2 = "Başka bir test dizisi.";
$substring2 = "Başka";
if (startsWithSubstr($string2, $substring2)) {
echo "'$string2', '$substring2' ile başlıyorn";
} else {
echo "'$string2', '$substring2' ile başlamıyorn";
}
?>
Bu kod, 0. indeksten başlayarak $needle
uzunluğunda $haystack
‘in bir bölümünü ayıklar. Daha sonra hem türün hem de değerin eşleştiğinden emin olmak için sıkı bir karşılaştırma (===
) yapar. Bu yöntem, daha kısa alt dizeler için verimlidir.
Başlangıç Alt Dizisini Kontrol Etmek için strpos()
Kullanımı
strpos()
fonksiyonu, bir alt dizenin ilk oluşumunun konumunu bulur. Alt dize başlangıçta ise, konumu 0 olacaktır.
<?php
function startsWithPos(string $haystack, string $needle): bool {
//strpos, needle bulunmazsa false döndürür, bu yüzden != yerine !== kullanıyoruz
return strpos($haystack, $needle) === 0;
}
$string = "Bu bir test dizisidir.";
$substring = "Bu";
if (startsWithPos($string, $substring)) {
echo "'$string', '$substring' ile başlıyorn";
} else {
echo "'$string', '$substring' ile başlamıyorn";
}
$string2 = "Başka bir test dizisi.";
$substring2 = "Başka";
if (startsWithPos($string2, $substring2)) {
echo "'$string2', '$substring2' ile başlıyorn";
} else {
echo "'$string2', '$substring2' ile başlamıyorn";
}
?>
Bu özlü ve sık kullanılan bir yöntemdir. strpos()
, iğne bulunmazsa false
döndürdüğü için sıkı bir karşılaştırma (=== 0
) çok önemlidir.
Başlangıç Alt Dizisini Kontrol Etmek için strncmp()
Kullanımı
strncmp()
fonksiyonu, iki dizenin bölümlerini karşılaştırır. Büyük/küçük harfe duyarlı karşılaştırmalar için veya yalnızca belirli sayıda karakteri kontrol ederken özellikle kullanışlıdır.
<?php
function startsWithStrncmp(string $haystack, string $needle): bool {
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
$string = "Bu bir test dizisidir.";
$substring = "Bu";
if (startsWithStrncmp($string, $substring)) {
echo "'$string', '$substring' ile başlıyorn";
} else {
echo "'$string', '$substring' ile başlamıyorn";
}
$string2 = "Başka bir test dizisi.";
$substring2 = "Başka";
if (startsWithStrncmp($string2, $substring2)) {
echo "'$string2', '$substring2' ile başlıyorn";
} else {
echo "'$string2', '$substring2' ile başlamıyorn";
}
?>
strncmp()
, $haystack
‘in ilk strlen($needle)
karakterini $needle
ile karşılaştırır. 0 değerini döndürmek, bunların özdeş olduğu anlamına gelir. Bu fonksiyon verimlidir ve daha fazla kontrol sağlar.
Doğru Yöntemi Seçme
Basitlik ve okunabilirlik için daha kısa alt dizelerde substr()
iyi bir seçimdir. strpos()
çoğu durumda özlü ve verimli bir çözüm sunar. strncmp()
özellikle büyük/küçük harfe duyarlı karşılaştırmalar için veya karşılaştırmayı belirli sayıda karakterle sınırlandırırken daha fazla esneklik sunar. Çok büyük dizeler için hafif bir performans avantajı sağlayabilir, ancak çoğu yaygın kullanım durumu için strpos()
genellikle yeterlidir.