PHP में किसी स्ट्रिंग में सबस्ट्रिंग मौजूद है या नहीं, यह जांचने के लिए strpos() फ़ंक्शन सबसे कुशल और मानक तरीका है। दिए गए उदाहरण में strlen() के साथ तुलना दिखाई गई है, लेकिन यह अनावश्यक है।
दिया गया उदाहरण (काम करता है लेकिन अनावश्यक जटिल)
<?php
$str_1 = "thisisasample";
$str_2 = "asample";
if (strpos($str_1, $str_2) >= 0 && strpos($str_1, $str_2) < strlen($str_1))
echo("The substring is present within the string.");
else
echo("The substring is not present within the string.");
?>
आउटपुट
The substring is present within the string.
सही और सरल तरीका
<?php
$str_1 = "thisisasample";
$str_2 = "asample";
// strpos() === false का उपयोग करें (नहीं != false, क्योंकि 0 भी वैध स्थिति है)
if (strpos($str_1, $str_2) !== false) {
echo "Substring found!";
} else {
echo "Substring not found.";
}
?>
strpos() का व्यवहार
- सबस्ट्रिंग मिलने पर: उसकी **स्थिति (0-आधारित)** लौटाता है।
- नहीं मिलने पर:
falseलौटाता है। - महत्वपूर्ण: स्थिति 0 (शुरुआत में) मिलने पर
0लौटाता है, जो लूज़ तुलना (== false) मेंfalseके बराबर होता है। इसलिए हमेशा!== falseया=== falseउपयोग करें।
केस-इनसेंसिटिव खोज: stripos()
<?php
$haystack = "Hello World";
$needle = "world";
if (stripos($haystack, $needle) !== false) {
echo "Found (case-insensitive)";
}
?>
बहु-बाइट स्ट्रिंग्स के लिए: mb_strpos()
<?php
$str = "नमस्ते दुनिया";
if (mb_strpos($str, "दुनिया") !== false) {
echo "Found in UTF-8 string";
}
?>
अन्य तरीके
| फ़ंक्शन | उपयोग | नोट |
|---|---|---|
strpos() | सबसे तेज़, केस-सेंसिटिव | स्थिति या false |
stripos() | केस-इनसेंसिटिव | थोड़ा धीमा |
strstr() | सबस्ट्रिंग से अंत तक लौटाता है | बूलियन संदर्भ में काम करता है |
preg_match() | रेगेक्स पैटर्न | जटिल पैटर्न के लिए, धीमा |
mb_strpos() | मल्टीबाइट (UTF-8) सुरक्षित | mbstring एक्सटेंशन आवश्यक |
सर्वोत्तम अभ्यास
- सरल सबस्ट्रिंग जांच के लिए
strpos() !== falseउपयोग करें। - केस-इनसेंसिटिव के लिए
stripos()। - UTF-8/हिंदी/अन्य भाषाओं के लिए
mb_strpos()याmb_stripos()। strlen()तुलना की आवश्यकता नहीं —strpos()कभी स्ट्रिंग लंबाई से बड़ा मान नहीं लौटाता।