تم استخدام لغة PHP بنشاط بين مطوري الويب لسنوات عديدة. كما هو الحال في كل لغة برمجية، تتمتع لغة PHP بأفضل الممارسات والأخطاء/سوء الاستخدام غير المعروفة. في هذا الدرس PHP strpos() سنتحدث عن كيفية استخدام وظيفتها بأفضل طريقة وبمعلومات غير معروفة.
لا تقارن مع صحيح
بلغة PHP strpos() تقوم الدالة بإرجاع موضع البداية للنص الذي تم البحث عنه. strpos() عندما نستخدم الوظيفة أثناء البحث عما إذا كان الهدف موجودًا في النص، عندما يتم العثور على الهدف 1، عندما لا يتم العثور عليها 0 إرجاع الرمز. إذا تم العثور على الهدف في بداية النص الذي تم البحث عنه، 0 يعود. هذا ليس خطأً بالضبط في PHP، ولكن نتيجة لذلك، عندما يتم البحث عن وجود النص الهدف في استعلام if المكتوب كما في المثال أدناه، يكون النص الهدف في البداية. 0 وسوف يسبب خطأ في البرنامج لأنه سيعود .
مثال:
$data = "Onur Özden Web Çözümleri";
$search = "Onur";
if (strpos($data, $search) === true) {
echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyorفي المثال، عملت الكتلة else. هذا خطأ! لأنه في النص الذي استخدمناه في المثال، تم ذكر الاسم "Onur". هذا بسبب strpos() في الدالة، إذا كان النص الذي تم البحث عنه في بداية البيانات، تسمى الدالة "0 هو العودة الجواب. إذن كيف نتغلب على هذه المشكلة؟ هل نحتاج إلى استخدام وظيفة مختلفة؟ لا، ليست هناك حاجة لهذا. هناك حل بسيط للغاية لهذه المشكلة. دعونا نفحص المثال ونفصله.
$data = "Onur Özden Web Çözümleri";
$search = "Onur";
if (strpos($data, $search) !== false) { // Bu blok çalışacak
echo "Metinde '{$search}' ifadesi geçiyor";
} else {
echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyorفي هذا المثال، المقارنة في كتلة if عملت بشكل صحيح. والسبب هو أن جميع لغات البرمجة الشائعة، بما في ذلك PHP، وحتى المنطق البرمجي 0 قيمة false, 1 قيمة true يعتبر. نظرًا لأن القيمة المرجعة هي 0، عند إجراء مقارنة النوع المنطقي في كتلة if، تتم معالجة القيمة 0 على أنها خطأ ويحدث هذا الخطأ.
استخدم المقارنة الصارمة عند المقارنة مع الخطأ
هناك تفصيل آخر مهم جدًا يجب أن ننتبه إليه في المثال السابق. إذا أجرينا مقارنة مساواة (مقارنة فضفاضة) بدلاً من المقارنة الصارمة، فسنواجه نفس الخطأ مرة أخرى. نظرًا لأن مقارنة المساواة لا تشكك في نوع البيانات، فإن مقارنة التكافؤ تشكك أيضًا في نوع البيانات. دعونا نتفحص مثالاً غير صحيح لما نتحدث عنه. دعونا نفعل مثالا دون مقارنة التكافؤ ونرى النتيجة
$data = "Onur Özden Web Çözümleri";
$search = "Onur";
if (strpos($data, $search) != false) {
echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyorيمكننا إدارة حساسية الحالة
الدالة strpos () حساسة لحالة الأحرف بشكل افتراضي. إذا أردنا إزالة هذه الحساسية، يجب علينا استخدام الدالة stripos(). لنلقِ نظرة على مثال للدالة stripos():
$data = "Onur Özden Web Çözümleri";
$search = "onur";
if (stripos($data, $search) !== false) { // Bu blok çalışacak
echo "Metinde '{$search}' ifadesi geçiyor";
} else {
echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyorيمكننا التحقق مما إذا كان النص الذي تم البحث عنه يحدث أكثر من مرة باستخدام الدالة strpos()
المثال الأول:
يمكننا التحقق من عدد المرات التي يظهر فيها النص الهدف في البيانات باستخدام الدالة strpos(). في المثال الأول، سنعرض الطريقة الإبداعية ولكن الأبسط والأساسية للقيام بذلك، وفي المثال الثاني، سنعرض أفضل طريقة، وهي أكثر عملية.
$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";
// undefined hatası almamak için değişkenleri tanımla ve varsayılan olarak 0 değerini ver;
$position = 0;
$count = 0;
while (($position = strpos($data, $search, $position)) !== false) {
$count++; // Kaçıncı kez geçtiğini say
$position++; // Sonraki arama için pozisyonu artır
}
// Sonucu yazdır
echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor<br>";
// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyorالمثال الثاني:
$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";
// substr_count fonksiyonu ile $search ifadesinin $data içindeki toplam sayısını hesapla
$count = substr_count($data, $search);
// veri içerisinde hedef kelime geçmiyorsa "0 adet geçiyor" gibi anlamsız bir ifade çıktılanmaması için koşul
if ($count > 0) { // veride hedef ifade geçtiği için bu blok çalışacak
echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor";
} else {
echo "Veri içerisinde '{$search}' kelimesi geçmiyor.";
}
// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyorsubstr_count() باختصار، تقوم الدالة بحساب عدد النصوص الفرعية التي تم تمريرها في الهدف وعدد المرات. يمكنك العثور على وثائق وأمثلة مفصلة لهذه الوظيفة هنا -> https://www.php.net/manual/function.substr-count.php
حول strpos()
في هذه المقالة strpos() لقد تعلمنا كيفية استخدام وظيفتها بأفضل طريقة وتصحيح سوء الاستخدام الأكثر شيوعًا. strpos() مع وظيفتها stripos() و substr_count() كما تعرفنا على وظائفهم. ترقبوا بقية سلسلتنا حول أفضل أساليب البرمجة عالية الجودة.



