توفر PHP العديد من الطرق الفعالة لتحديد ما إذا كانت سلسلة تبدأ بجزء فرعي محدد. ستستعرض هذه المقالة ثلاثة أساليب شائعة: استخدام دوال substr()
و strpos()
و strncmp()
. لكل طريقة نقاط قوتها وضعفها، مما يجعلها مناسبة لسياقات مختلفة.
محتويات
- استخدام
substr()
للتحقق من جزء فرعي بادئ - استخدام
strpos()
للتحقق من جزء فرعي بادئ - استخدام
strncmp()
للتحقق من جزء فرعي بادئ - اختيار الطريقة المناسبة
استخدام substr()
للتحقق من جزء فرعي بادئ
تستخرج دالة substr()
جزءًا من سلسلة. يمكننا استخدام هذا للتحقق مما إذا كانت بداية السلسلة تطابق جزءنا الفرعي الهدف. هذا النهج بسيط وسهل الفهم.
<?php
function startsWithSubstr(string $haystack, string $needle): bool {
return substr($haystack, 0, strlen($needle)) === $needle;
}
$string = "This is a test string.";
$substring = "This";
if (startsWithSubstr($string, $substring)) {
echo "'$string' starts with '$substring'n";
} else {
echo "'$string' does not start with '$substring'n";
}
$string2 = "Another test string.";
$substring2 = "Test";
if (startsWithSubstr($string2, $substring2)) {
echo "'$string2' starts with '$substring2'n";
} else {
echo "'$string2' does not start with '$substring2'n";
}
?>
يقوم هذا الكود باستخراج جزء من $haystack
بطول $needle
، بدءًا من الفهرس 0. ثم يقوم بمقارنة صارمة (===
) لضمان تطابق النوع والقيمة. هذه الطريقة فعالة للأجزاء الفرعية الأقصر.
استخدام strpos()
للتحقق من جزء فرعي بادئ
تجد دالة strpos()
موضع أول ظهور لجزء فرعي. إذا كان الجزء الفرعي في البداية، فسيكون موضعه 0.
<?php
function startsWithPos(string $haystack, string $needle): bool {
//strpos returns false if needle is not found, so we use !== instead of !=
return strpos($haystack, $needle) === 0;
}
$string = "This is a test string.";
$substring = "This";
if (startsWithPos($string, $substring)) {
echo "'$string' starts with '$substring'n";
} else {
echo "'$string' does not start with '$substring'n";
}
$string2 = "Another test string.";
$substring2 = "Test";
if (startsWithPos($string2, $substring2)) {
echo "'$string2' starts with '$substring2'n";
} else {
echo "'$string2' does not start with '$substring2'n";
}
?>
هذه طريقة موجزة و مستخدمة بشكل متكرر. المقارنة الصارمة (=== 0
) ضرورية لأن strpos()
تُرجع false
إذا لم يتم العثور على الإبرة.
استخدام strncmp()
للتحقق من جزء فرعي بادئ
تقارن دالة strncmp()
أجزاء من سلسلتين. إنها مفيدة بشكل خاص للمقارنات الحساسة لحالة الأحرف أو عند التحقق من عدد محدد فقط من الأحرف.
<?php
function startsWithStrncmp(string $haystack, string $needle): bool {
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
$string = "This is a test string.";
$substring = "This";
if (startsWithStrncmp($string, $substring)) {
echo "'$string' starts with '$substring'n";
} else {
echo "'$string' does not start with '$substring'n";
}
$string2 = "Another test string.";
$substring2 = "Test";
if (startsWithStrncmp($string2, $substring2)) {
echo "'$string2' starts with '$substring2'n";
} else {
echo "'$string2' does not start with '$substring2'n";
}
?>
تقارن strncmp()
أول strlen($needle)
من الأحرف في $haystack
مع $needle
. قيمة الإرجاع 0 تعني أنها متطابقة. هذه الدالة فعالة وتوفر المزيد من التحكم.
اختيار الطريقة المناسبة
للبساطة وسهولة القراءة مع الأجزاء الفرعية الأقصر، substr()
خيار جيد. توفر strpos()
حلاً موجزًا وفعالًا في معظم الحالات. توفر strncmp()
مرونة أكبر، خاصةً للمقارنات الحساسة لحالة الأحرف أو عند الحد من المقارنة إلى عدد معين من الأحرف. بالنسبة للسلاسل الكبيرة جدًا، قد توفر ميزة أداء طفيفة، ولكن بالنسبة لمعظم حالات الاستخدام الشائعة، تكون strpos()
كافية عادةً.