विचार करें:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
मान लीजिए मेरे पास ऊपर का कोड है, कथन लिखने का सही तरीका क्या है if ($a contains 'are')
?
विचार करें:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
मान लीजिए मेरे पास ऊपर का कोड है, कथन लिखने का सही तरीका क्या है if ($a contains 'are')
?
जवाबों:
आप उस strpos()
फ़ंक्शन का उपयोग कर सकते हैं जिसका उपयोग किसी दूसरे के अंदर एक स्ट्रिंग की घटना को खोजने के लिए किया जाता है:
$a = 'How are you?';
if (strpos($a, 'are') !== false) {
echo 'true';
}
ध्यान दें कि के उपयोग !== false
जानबूझकर है (न तो != false
है और न ही === true
वांछित परिणाम वापस आ जाएगी); strpos()
या तो ऑफसेट जिस पर सुई स्ट्रिंग हैस्टैक स्ट्रिंग में शुरू होती है, या false
यदि सुई नहीं मिली है तो बूलियन । चूंकि 0 एक वैध ऑफसेट है और 0 "फॉल्सी" है, इसलिए हम सरल निर्माणों का उपयोग नहीं कर सकते हैं !strpos($a, 'are')
।
strpos($a, 'are') > -1
सच का परीक्षण करने के लिए उपयोग करके इस मुद्दे से बचता हूं । डिबगिंग के नजरिए से, मुझे लगता है कि मेरे दिमाग में कम से कम घड़ी चक्रों का निर्धारण होता है जो यह निर्धारित करते हैं कि लाइन को सही तरीके से लिखा गया है जब मुझे सन्निहित बराबर संकेतों की गणना नहीं करनी है।
आप नियमित अभिव्यक्तियों का उपयोग कर सकते हैं, यह शब्द मिलान के लिए बेहतर है strpos
क्योंकि अन्य उपयोगकर्ताओं द्वारा उल्लेख किया गया है, यह भी इस तरह के किराया, देखभाल, घूरना, आदि के लिए सही लौटेगा। यह केवल शब्द सीमाओं का उपयोग करके नियमित अभिव्यक्ति से बचा जा सकता है।
इसके लिए एक साधारण मैच कुछ इस तरह दिख सकता है:
$a = 'How are you?';
if (preg_match('/\bare\b/', $a)) {
echo 'true';
}
प्रदर्शन के पक्ष में, strpos
लगभग तीन गुना तेज है और मन में है, जब मैंने एक बार में एक मिलियन की तुलना की, तो इसे preg_match
खत्म होने में 1.5 सेकंड लगे और इसके लिए strpos
0.5 सेकंड लगे।
संपादित करें: स्ट्रिंग के किसी भी भाग को खोजने के लिए, केवल शब्द से शब्द नहीं, मैं एक नियमित अभिव्यक्ति का उपयोग करने की सलाह दूंगा
$a = 'How are you?';
$search = 'are y';
if(preg_match("/{$search}/i", $a)) {
echo 'true';
}
i
नियमित अभिव्यक्ति के अंत में नियमित अभिव्यक्ति में परिवर्तन केस-संवेदी होने के लिए, अगर आपको लगता है कि नहीं करना चाहते, आप इसे बाहर छोड़ सकते हैं।
अब, यह कुछ मामलों में काफी समस्याग्रस्त हो सकता है क्योंकि $ सर्च स्ट्रिंग को किसी भी तरह से सैनिटाइज़ नहीं किया जाता है, मेरा मतलब है कि यह कुछ मामलों में चेक को पास नहीं कर सकता है जैसे कि $search
एक उपयोगकर्ता इनपुट है जो वे कुछ स्ट्रिंग जोड़ सकते हैं जो व्यवहार कर सकते हैं जैसे कुछ अलग नियमित अभिव्यक्ति ...
इसके अलावा, यहाँ विभिन्न रेगुलर एक्सप्रेशन्स Regex101 के स्पष्टीकरण और परीक्षण को देखने के लिए एक बढ़िया उपकरण है
कार्यक्षमता के दोनों सेटों को एक बहु-बहुद्देश्यीय फ़ंक्शन (चुनिंदा केस संवेदनशीलता के साथ) में संयोजित करने के लिए, आप इस तरह से कुछ का उपयोग कर सकते हैं:
function FindString($needle,$haystack,$i,$word)
{ // $i should be "" or "i" for case insensitive
if (strtoupper($word)=="W")
{ // if $word is "W" then word search instead of string in string search.
if (preg_match("/\b{$needle}\b/{$i}", $haystack))
{
return true;
}
}
else
{
if(preg_match("/{$needle}/{$i}", $haystack))
{
return true;
}
}
return false;
// Put quotes around true and false above to return them as strings instead of as bools/ints.
}
यहाँ थोड़ा उपयोगिता फ़ंक्शन है जो इस तरह की स्थितियों में उपयोगी है
// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
return strpos($haystack, $needle) !== false;
}
if ($email->contains("@") && $email->endsWith(".com)) { ...
याif (strpos($email, "@") !== false && substr($email, -strlen(".com")) == ".com") { ...
इन उत्तरों से ज्यादातर आपको बता देंगे, वहीं अगर आपके स्ट्रिंग, आम तौर पर नहीं है कि में एक सबस्ट्रिंग प्रकट होता है क्या आप चाहते हैं कि आप किसी विशेष के लिए देख रहे हैं शब्द , और नहीं एक स्ट्रिंग ।
क्या फर्क पड़ता है? सबस्ट्रिंग अन्य शब्दों में प्रकट हो सकते हैं:
इसे कम करने का एक तरीका यह होगा कि एक नियमित अभिव्यक्ति का उपयोग शब्द सीमाओं ( \b
) के साथ जोड़ा जाए :
function containsWord($str, $word)
{
return !!preg_match('#\\b' . preg_quote($word, '#') . '\\b#i', $str);
}
इस विधि में ऊपर उल्लिखित समान झूठी सकारात्मकता नहीं है, लेकिन इसके अपने कुछ किनारे मामले हैं। शब्द सीमाओं गैर शब्द अक्षर (पर से मेल खाते हैं \W
) है, जो कुछ भी है कि नहीं होने जा रहे हैं a-z
, A-Z
, 0-9
, या _
। इसका अर्थ है कि अंक और अंडरस्कोर शब्द वर्णों के रूप में गिने जा रहे हैं और इस तरह के परिदृश्य विफल हो जाएंगे:
यदि आप इससे अधिक सटीक कुछ भी चाहते हैं, तो आपको अंग्रेजी भाषा का सिंटैक्स पार्स करना शुरू करना होगा, और यह कीड़ा का एक बहुत बड़ा कैन है (और सिंटैक्स के उचित उपयोग को मानता है, वैसे भी, जो हमेशा एक दिया नहीं है)।
\b
दो चीजों को \W
भी ^
$
यह निर्धारित करने के लिए कि क्या एक स्ट्रिंग में एक और स्ट्रिंग है आप PHP फ़ंक्शन स्ट्रैप () का उपयोग कर सकते हैं ।
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
<?php
$haystack = 'how are you';
$needle = 'are';
if (strpos($haystack,$needle) !== false) {
echo "$haystack contains $needle";
}
?>
सावधान:
यदि आप जिस सुई की खोज कर रहे हैं, वह हैस्टैक की शुरुआत में है, तो यह स्थिति 0 पर लौटेगी, यदि आप एक ==
तुलना करते हैं जो काम नहीं करेगा , तो आपको एक करने की आवश्यकता होगी===
एक ==
चिन्ह एक तुलना और परीक्षण है कि क्या चर / अभिव्यक्ति / बायीं ओर का मान वैसा ही है जैसा चर / अभिव्यक्ति / दायीं ओर होता है।
एक ===
संकेत यह देखने के लिए है कि क्या दो चर / घातांक / स्थिरांक समान AND
हैं - दोनों एक ही प्रकार के हैं या दोनों पूर्णांक हैं।
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Note our use of ===. Simply, == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'.";
}
else {
echo "The string '$findme' was found in the string '$mystring',";
echo " and exists at position $pos.";
}
?>
का उपयोग करना strstr()
या stristr()
अगर आपकी खोज के मामले में असंवेदनशील होना चाहिए तो एक और विकल्प होगा।
strstr($a, 'are')
बदसूरत की तुलना में बहुत अधिक सुरुचिपूर्ण है strpos($a, 'are') !== false
। PHP को वास्तव में एक str_contains()
फ़ंक्शन की आवश्यकता होती है।
का उपयोग करें केस-insensitve मिलान का उपयोग कर stripos()
:
if (stripos($string,$stringToSearch) !== false) {
echo 'true';
}
समरुडी और लेगो स्ट्रोमट्रोप्र टिप्पणियों के लिए पीयर।
यदि आप कई शब्दों की निकटता / प्रासंगिकता के आधार पर खोज परिणामों को रैंक करने के लिए एक PHP एल्गोरिथ्म की तलाश कर रहे हैं, तो केवल PHP के साथ खोज परिणाम उत्पन्न करने का एक त्वरित और आसान तरीका आता है:
अन्य बूलियन खोज के तरीकों के साथ मुद्दों जैसे strpos()
, preg_match()
, strstr()
याstristr()
वेक्टर स्पेस मॉडल और tf-idf (टर्म फ़्रीक्वेंसी-उलटा डॉक्यूमेंट फ़्रीक्वेंसी) पर आधारित PHP विधि :
यह मुश्किल लगता है लेकिन आश्चर्यजनक रूप से आसान है।
यदि हम एक स्ट्रिंग में कई शब्दों की खोज करना चाहते हैं तो मूल समस्या यह है कि हम उनमें से हर एक को कैसे एक वजन प्रदान करते हैं?
यदि हम एक स्ट्रिंग में शर्तों को भारित कर सकते हैं, तो इस आधार पर कि वे पूरी तरह से स्ट्रिंग के प्रतिनिधि हैं, हम क्वेरी द्वारा सबसे अच्छा मिलान करने वाले लोगों द्वारा हमारे परिणाम का आदेश दे सकते हैं।
यह वेक्टर स्पेस मॉडल का विचार है, एसक्यूएल फुल-टेक्स्ट सर्च कैसे काम करता है , इससे दूर नहीं:
function get_corpus_index($corpus = array(), $separator=' ') {
$dictionary = array();
$doc_count = array();
foreach($corpus as $doc_id => $doc) {
$terms = explode($separator, $doc);
$doc_count[$doc_id] = count($terms);
// tf–idf, short for term frequency–inverse document frequency,
// according to wikipedia is a numerical statistic that is intended to reflect
// how important a word is to a document in a corpus
foreach($terms as $term) {
if(!isset($dictionary[$term])) {
$dictionary[$term] = array('document_frequency' => 0, 'postings' => array());
}
if(!isset($dictionary[$term]['postings'][$doc_id])) {
$dictionary[$term]['document_frequency']++;
$dictionary[$term]['postings'][$doc_id] = array('term_frequency' => 0);
}
$dictionary[$term]['postings'][$doc_id]['term_frequency']++;
}
//from http://phpir.com/simple-search-the-vector-space-model/
}
return array('doc_count' => $doc_count, 'dictionary' => $dictionary);
}
function get_similar_documents($query='', $corpus=array(), $separator=' '){
$similar_documents=array();
if($query!=''&&!empty($corpus)){
$words=explode($separator,$query);
$corpus=get_corpus_index($corpus, $separator);
$doc_count=count($corpus['doc_count']);
foreach($words as $word) {
if(isset($corpus['dictionary'][$word])){
$entry = $corpus['dictionary'][$word];
foreach($entry['postings'] as $doc_id => $posting) {
//get term frequency–inverse document frequency
$score=$posting['term_frequency'] * log($doc_count + 1 / $entry['document_frequency'] + 1, 2);
if(isset($similar_documents[$doc_id])){
$similar_documents[$doc_id]+=$score;
}
else{
$similar_documents[$doc_id]=$score;
}
}
}
}
// length normalise
foreach($similar_documents as $doc_id => $score) {
$similar_documents[$doc_id] = $score/$corpus['doc_count'][$doc_id];
}
// sort from high to low
arsort($similar_documents);
}
return $similar_documents;
}
मामला एक
$query = 'are';
$corpus = array(
1 => 'How are you?',
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
परिणाम
Array
(
[1] => 0.52832083357372
)
मामला 2
$query = 'are';
$corpus = array(
1 => 'how are you today?',
2 => 'how do you do',
3 => 'here you are! how are you? Are we done yet?'
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
परिणाम
Array
(
[1] => 0.54248125036058
[3] => 0.21699250014423
)
मामला 3
$query = 'we are done';
$corpus = array(
1 => 'how are you today?',
2 => 'how do you do',
3 => 'here you are! how are you? Are we done yet?'
);
$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
print_r($match_results);
echo '</pre>';
परिणाम
Array
(
[3] => 0.6813781191217
[1] => 0.54248125036058
)
बहुत सारे सुधार किए जाने हैं, लेकिन मॉडल प्राकृतिक प्रश्नों से अच्छे परिणाम प्राप्त करने का एक तरीका प्रदान करता है, जिनके पास बूलियन ऑपरेटर नहीं हैं strpos()
, जैसे preg_match()
, strstr()
या stristr()
।
नोट नहीं
वैकल्पिक रूप से शब्दों को खोजने से पहले अतिरेक को समाप्त करना
जिससे सूचकांक का आकार कम हो जाता है और परिणामस्वरूप भंडारण की आवश्यकता कम हो जाती है
कम डिस्क I / O
तेजी से अनुक्रमण और परिणामस्वरूप तेजी से खोज।
1. सामान्यीकरण
2. स्टॉपवर्ड एलिमिनेशन
3. शब्दकोश प्रतिस्थापन
उन शब्दों को दूसरों के साथ बदलें, जिनके समान या समान अर्थ हैं। (पूर्व: 'भूख' के साथ 'भूखे' और 'भूखे' के उदाहरणों को बदलें)
आगे एल्गोरिदम उपायों (स्नोबॉल) को उनके आवश्यक अर्थ के लिए शब्दों को और कम करने के लिए किया जा सकता है।
उनके हेक्साडेसिमल समकक्षों के साथ रंग नामों का प्रतिस्थापन
परिशुद्धता को कम करके संख्यात्मक मूल्यों की कमी पाठ को सामान्य करने के अन्य तरीके हैं।
संसाधन
यदि आप "गलत" और "सत्य" समस्या से बचना चाहते हैं, तो आप root_count का उपयोग कर सकते हैं:
if (substr_count($a, 'are') > 0) {
echo "at least one 'are' is present!";
}
यह स्ट्रैप्स की तुलना में थोड़ा धीमा है लेकिन यह तुलनात्मक समस्याओं से बचता है।
false
"क्या आपको यकीन है?" के बाद से स्थिति strpos
है0
एक और विकल्प स्ट्रैस () फ़ंक्शन का उपयोग करना है। कुछ इस तरह:
if (strlen(strstr($haystack,$needle))>0) {
// Needle Found
}
ध्यान दें: स्ट्रैस () फ़ंक्शन केस-संवेदी है। केस-असंवेदनशील खोज के लिए, स्ट्रिंग () फ़ंक्शन का उपयोग करें ।
मैं थोड़ा प्रभावित हूं कि यहां कोई भी जवाब नहीं दिया गया है strpos
, strstr
और इसी तरह के कार्यों ने मल्टीबाइट स्ट्रिंग फ़ंक्शंस का उल्लेख किया है (2015-05-08)।
मूल रूप से, यदि आपको कुछ भाषाओं के लिए विशिष्ट वर्ण वाले शब्दों को खोजने में समस्या हो रही है ऐसी जर्मन, फ्रेंच, पुर्तगाली, स्पेनिश, आदि के रूप में, (जैसे: ä , é , ô , ç , º , ñ ), तो आपको पहले आना चाहते हो सकता है के साथ कार्य करता है mb_
। इसलिए, स्वीकृत उत्तर का उपयोग करेगा mb_strpos
या mb_stripos
(केस-असंवेदनशील मिलान के लिए) इसके बजाय:
if (mb_strpos($a,'are') !== false) {
echo 'true';
}
यदि आप यह गारंटी नहीं दे सकते कि आपका सारा डेटा UTF-8 में 100% है , तो आप mb_
फ़ंक्शन का उपयोग करना चाह सकते हैं ।
यह समझने के लिए एक अच्छा लेख कि निरपेक्ष न्यूनतम हर सॉफ्टवेयर डेवलपर क्यों होता है , जोएल स्पोलस्की द्वारा यूनिकोड और कैरेक्टर सेट (कोई बहाना नहीं!) के बारे में सकारात्मक रूप से जानना चाहिए ।
PHP में, यह सत्यापित करने का सबसे अच्छा तरीका है कि अगर स्ट्रिंग में एक निश्चित सबस्ट्रिंग है, तो इस तरह से एक साधारण सहायक फ़ंक्शन का उपयोग करना है:
function contains($haystack, $needle, $caseSensitive = false) {
return $caseSensitive ?
(strpos($haystack, $needle) === FALSE ? FALSE : TRUE):
(stripos($haystack, $needle) === FALSE ? FALSE : TRUE);
}
strpos
एक स्ट्रिंग में केस-संवेदी प्रतिस्थापन की पहली घटना की स्थिति का पता लगाता है।stripos
एक स्ट्रिंग में केस-असंवेदनशील प्रतिस्थापन की पहली घटना की स्थिति का पता लगाता है।myFunction($haystack, $needle) === FALSE ? FALSE : TRUE
सुनिश्चित करता है कि myFunction
हमेशा एक बूलियन लौटाता है और अप्रत्याशित व्यवहार को ठीक करता है जब सबस्ट्रिंग का सूचकांक 0 होता है।$caseSensitive ? A : B
या तो चयन करता है strpos
stripos
के मान के आधार पर या काम काम करता है $caseSensitive
।var_dump(contains('bare','are')); // Outputs: bool(true)
var_dump(contains('stare', 'are')); // Outputs: bool(true)
var_dump(contains('stare', 'Are')); // Outputs: bool(true)
var_dump(contains('stare', 'Are', true)); // Outputs: bool(false)
var_dump(contains('hair', 'are')); // Outputs: bool(false)
var_dump(contains('aren\'t', 'are')); // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are')); // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are', true)); // Outputs: bool(false)
var_dump(contains('aren\'t', 'Are')); // Outputs: bool(true)
var_dump(contains('aren\'t', 'Are', true)); // Outputs: bool(false)
var_dump(contains('broad', 'are')); // Outputs: bool(false)
var_dump(contains('border', 'are')); // Outputs: bool(false)
नीचे दिया गया फ़ंक्शन भी काम करता है और किसी अन्य फ़ंक्शन पर निर्भर नहीं करता है; यह केवल मूल PHP स्ट्रिंग हेरफेर का उपयोग करता है। व्यक्तिगत रूप से, मैं इसकी अनुशंसा नहीं करता, लेकिन आप देख सकते हैं कि यह कैसे काम करता है:
<?php
if (!function_exists('is_str_contain')) {
function is_str_contain($string, $keyword)
{
if (empty($string) || empty($keyword)) return false;
$keyword_first_char = $keyword[0];
$keyword_length = strlen($keyword);
$string_length = strlen($string);
// case 1
if ($string_length < $keyword_length) return false;
// case 2
if ($string_length == $keyword_length) {
if ($string == $keyword) return true;
else return false;
}
// case 3
if ($keyword_length == 1) {
for ($i = 0; $i < $string_length; $i++) {
// Check if keyword's first char == string's first char
if ($keyword_first_char == $string[$i]) {
return true;
}
}
}
// case 4
if ($keyword_length > 1) {
for ($i = 0; $i < $string_length; $i++) {
/*
the remaining part of the string is equal or greater than the keyword
*/
if (($string_length + 1 - $i) >= $keyword_length) {
// Check if keyword's first char == string's first char
if ($keyword_first_char == $string[$i]) {
$match = 1;
for ($j = 1; $j < $keyword_length; $j++) {
if (($i + $j < $string_length) && $keyword[$j] == $string[$i + $j]) {
$match++;
}
else {
return false;
}
}
if ($match == $keyword_length) {
return true;
}
// end if first match found
}
// end if remaining part
}
else {
return false;
}
// end for loop
}
// end case4
}
return false;
}
}
परीक्षा:
var_dump(is_str_contain("test", "t")); //true
var_dump(is_str_contain("test", "")); //false
var_dump(is_str_contain("test", "test")); //true
var_dump(is_str_contain("test", "testa")); //flase
var_dump(is_str_contain("a----z", "a")); //true
var_dump(is_str_contain("a----z", "z")); //true
var_dump(is_str_contain("mystringss", "strings")); //true
आप strstr
फ़ंक्शन का उपयोग कर सकते हैं :
$haystack = "I know programming";
$needle = "know";
$flag = strstr($haystack, $needle);
if ($flag){
echo "true";
}
इनबिल्ट फ़ंक्शन का उपयोग किए बिना:
$haystack = "hello world";
$needle = "llo";
$i = $j = 0;
while (isset($needle[$i])) {
while (isset($haystack[$j]) && ($needle[$i] != $haystack[$j])) {
$j++;
$i = 0;
}
if (!isset($haystack[$j])) {
break;
}
$i++;
$j++;
}
if (!isset($needle[$i])) {
echo "YES";
}
else{
echo "NO ";
}
मुझे इससे कुछ परेशानी हुई, और आखिरकार मैंने अपना समाधान बनाने के लिए चुना। नियमित अभिव्यक्ति इंजन का उपयोग किए बिना :
function contains($text, $word)
{
$found = false;
$spaceArray = explode(' ', $text);
$nonBreakingSpaceArray = explode(chr(160), $text);
if (in_array($word, $spaceArray) ||
in_array($word, $nonBreakingSpaceArray)
) {
$found = true;
}
return $found;
}
आप देख सकते हैं कि पिछले समाधान दूसरे के लिए उपसर्ग के रूप में इस्तेमाल किए जा रहे शब्द का जवाब नहीं हैं। अपने उदाहरण का उपयोग करने के लिए:
$a = 'How are you?';
$b = "a skirt that flares from the waist";
$c = "are";
ऊपर के नमूनों के साथ, दोनों में $a
और $b
शामिल हैं $c
, लेकिन आप अपने फ़ंक्शन को यह बताना चाहते हैं कि केवल $a
शामिल हैं $c
।
$found = false
शुरुआत में
का उपयोग कर एक स्ट्रिंग से एक शब्द की घटना पाने के लिए एक अन्य विकल्प strstr () और stristr () निम्नलिखित की तरह है:
<?php
$a = 'How are you?';
if (strstr($a,'are')) // Case sensitive
echo 'true';
if (stristr($a,'are')) // Case insensitive
echo 'true';
?>
i
में stristr
असंवेदनशील के लिए खड़ा है।
substr_count
यदि परिणाम है तो चेक का उपयोग करने वाले उत्तर के बहुत >0
। लेकिन चूंकि if
कथन शून्य को असत्य मानता है , आप उस जाँच से बच सकते हैं और सीधे लिख सकते हैं:
if (substr_count($a, 'are')) {
यह देखने के लिए कि क्या मौजूद नहीं है , !
ऑपरेटर जोड़ें :
if (!substr_count($a, 'are')) {
इसे तीन अलग-अलग तरीकों से किया जा सकता है:
$a = 'How are you?';
1- स्ट्रिस्टर ()
if (strlen(stristr($a,"are"))>0) {
echo "true"; // are Found
}
2- स्ट्रैप ()
if (strpos($a, "are") !== false) {
echo "true"; // are Found
}
3- प्रीग_मैच ()
if( preg_match("are",$a) === 1) {
echo "true"; // are Found
}
लघु-हस्त संस्करण
$result = false!==strpos($a, 'are');
अक्षरों की एक श्रृंखला की घटना के बजाय एक 'शब्द' खोजने के लिए, जो वास्तव में दूसरे शब्द का हिस्सा हो सकता है, निम्नलिखित एक अच्छा समाधान होगा।
$string = 'How are you?';
$array = explode(" ", $string);
if (in_array('are', $array) ) {
echo 'Found the word';
}
$string
हैAre are, are?
आपको केस असंवेदनशील प्रारूप का उपयोग करना चाहिए, इसलिए यदि दर्ज मूल्य में है small
या caps
यह अभ्यस्त मामला है।
<?php
$grass = "This is pratik joshi";
$needle = "pratik";
if (stripos($grass,$needle) !== false) {
/*If i EXCLUDE : !== false then if string is found at 0th location,
still it will say STRING NOT FOUND as it will return '0' and it
will goto else and will say NOT Found though it is found at 0th location.*/
echo 'Contains word';
}else{
echo "does NOT contain word";
}
?>
यहाँ स्ट्रिप केस (छोटे / कैप) पर विचार किए बिना हीस्टैक में सुई लगाता है ।
शायद आप इस तरह से कुछ का उपयोग कर सकते हैं:
<?php
findWord('Test all OK');
function findWord($text) {
if (strstr($text, 'ok')) {
echo 'Found a word';
}
else
{
echo 'Did not find a word';
}
}
?>
preg_match()
यदि आप केवल एक स्ट्रिंग दूसरे स्ट्रिंग में समाहित करना चाहते हैं, तो इसका उपयोग न करें । उपयोग strpos()
या strstr()
इसके बजाय वे तेज हो जाएगा। ( http://in2.php.net/preg_match )
if (strpos($text, 'string_name') !== false){
echo 'get the string';
}
यदि आप जांचना चाहते हैं कि क्या स्ट्रिंग में कई विशिष्ट शब्द हैं, तो आप कर सकते हैं:
$badWords = array("dette", "capitale", "rembourser", "ivoire", "mandat");
$string = "a string with the word ivoire";
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $string, $matches);
if ($matchFound) {
echo "a bad word has been found";
}
else {
echo "your string is okay";
}
उदाहरण के लिए ईमेल भेजते समय स्पैम से बचने के लिए यह उपयोगी है।
स्ट्रैप फंक्शन ठीक काम करता है, लेकिन अगर आप case-insensitive
पैराग्राफ में किसी शब्द के लिए चेकिंग करना चाहते हैं तो आप stripos
फंक्शन का उपयोग कर सकते हैं PHP
।
उदाहरण के लिए,
$result = stripos("I love PHP, I love PHP too!", "php");
if ($result === false) {
// Word does not exist
}
else {
// Word exists
}
एक स्ट्रिंग में केस-असंवेदनशील प्रतिस्थापन की पहली घटना की स्थिति का पता लगाएं।
यदि शब्द स्ट्रिंग में मौजूद नहीं है, तो यह झूठी स्थिति में वापस आ जाएगा और यह शब्द की स्थिति को वापस कर देगा।
आपको समान / समान समरूप संचालकों का उपयोग करने की आवश्यकता नहीं है क्योंकि स्ट्रैप 0 वापस आ सकता है क्योंकि यह सूचकांक मूल्य है। यदि आपको टर्नरी ऑपरेटर पसंद हैं, तो निम्नलिखित का उपयोग करने पर विचार करें (लगता है कि मैं पीछे से थोड़ा पीछे हटूंगा):
echo FALSE === strpos($a,'are') ? 'false': 'true';
जांचें कि क्या स्ट्रिंग में विशिष्ट शब्द हैं?
इसका मतलब है कि स्ट्रिंग को शब्दों में हल करना होगा (नीचे नोट देखें)।
ऐसा करने और विभाजकों को निर्दिष्ट करने का एक तरीका उपयोग कर रहा है preg_split
( डॉक्टर ):
<?php
function contains_word($str, $word) {
// split string into words
// separators are substrings of at least one non-word character
$arr = preg_split('/\W+/', $str, NULL, PREG_SPLIT_NO_EMPTY);
// now the words can be examined each
foreach ($arr as $value) {
if ($value === $word) {
return true;
}
}
return false;
}
function test($str, $word) {
if (contains_word($str, $word)) {
echo "string '" . $str . "' contains word '" . $word . "'\n";
} else {
echo "string '" . $str . "' does not contain word '" . $word . "'\n" ;
}
}
$a = 'How are you?';
test($a, 'are');
test($a, 'ar');
test($a, 'hare');
?>
एक रन देता है
$ php -f test.php
string 'How are you?' contains word 'are'
string 'How are you?' does not contain word 'ar'
string 'How are you?' does not contain word 'hare'
नोट: यहाँ हम प्रतीकों के प्रत्येक अनुक्रम के लिए शब्द का अर्थ नहीं है।
शब्द की एक व्यावहारिक परिभाषा पीसीआरई नियमित अभिव्यक्ति इंजन के अर्थ में है, जहां शब्द केवल शब्द वर्णों से बने होते हैं, गैर-शब्द वर्णों द्वारा अलग किए जा रहे हैं।
एक "शब्द" वर्ण किसी भी अक्षर या अंक या अंडरस्कोर वर्ण है, अर्थात्, कोई भी चरित्र जो एक पर्ल शब्द का हिस्सा हो सकता है "। अक्षरों और अंकों की परिभाषा को PCRE के चरित्र तालिकाओं द्वारा नियंत्रित किया जाता है, और यदि लोकेल-विशिष्ट मिलान हो रहा है तो यह भिन्न हो सकता है (..)