বিবেচনা:
$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 সেকেন্ড সময় নেয় took
সম্পাদনা: স্ট্রিংয়ের কোনও অংশ অনুসন্ধান করার জন্য, কেবলমাত্র শব্দ দ্বারা শব্দ নয়, আমি নিয়মিত মত প্রকাশের মতো সুপারিশ করব
$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
যা এটির সাথে মিলবে না, যা স্ট্রিংয়ে শব্দগুলি সন্ধানের জন্য দুর্দান্ত করে তোলে : এটি স্ট্রিংয়ের ( ^
) শুরু এবং স্ট্রিংয়ের শেষে ( $
) এর সাথে
স্ট্রিংয়ে অন্য স্ট্রিং রয়েছে কিনা তা নির্ধারণ করতে আপনি পিএইচপি ফাংশন স্ট্রপোস () ব্যবহার করতে পারেন ।
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 ফিরে আসবে, আপনি যদি একটি ==
তুলনা করেন যা কাজ করে না, আপনাকে একটি কাজ করতে হবে===
একটি ==
চিহ্ন একটি তুলনা এবং পরীক্ষা করে যে বামে পরিবর্তনশীল / এক্সপ্রেশন / ধ্রুবকটি ভেরিয়েবল / এক্সপ্রেশন / ডান ধ্রুবকের সমান মান আছে কিনা tests
===
দুটি ভেরিয়েবল / এক্সপ্রেশন / ধ্রুবক সমান হয় কি না তা দেখতে একটি চিহ্ন একটি তুলনা 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
। পিএইচপি সত্যিই একটি str_contains()
ফাংশন প্রয়োজন।
ব্যবহার করতে কেস-insensitve ম্যাচিং ব্যবহার stripos()
:
if (stripos($string,$stringToSearch) !== false) {
echo 'true';
}
পিয়ার টু সামগুডি এবং লেগো স্টর্মট্রোপার মন্তব্য।
আপনি যদি একাধিক শব্দের সান্নিধ্য / প্রাসঙ্গিকতার ভিত্তিতে অনুসন্ধান ফলাফলগুলি র্যাঙ্ক করার জন্য পিএইচপি অ্যালগরিদম খুঁজছেন তবে কেবলমাত্র পিএইচপি দিয়ে অনুসন্ধানের ফলাফল উত্পন্ন করার দ্রুত এবং সহজ উপায়টি এখানে আসে:
অন্যান্য বুলিয়ান অনুসন্ধান পদ্ধতি সমস্যা যেমন strpos()
, preg_match()
, strstr()
বাstristr()
ভেক্টর স্পেস মডেল এবং টিএফ-আইডিএফ (টার্ম ফ্রিকোয়েন্সি – বিপরীত ডকুমেন্ট ফ্রিকোয়েন্সি) এর ভিত্তিতে পিএইচপি পদ্ধতি :
এটি কঠিন মনে হলেও আশ্চর্যজনকভাবে সহজ।
যদি আমরা স্ট্রিংয়ে একাধিক শব্দ সন্ধান করতে চাই তবে মূল সমস্যাটি হ'ল আমরা কীভাবে তাদের প্রতিটিটির জন্য একটি ওজন নির্ধারণ করি?
আমরা যদি স্ট্রিংয়ের সামগ্রিকভাবে কতটা প্রতিনিধি তার উপর ভিত্তি করে শর্তগুলিতে ওজন করতে পারি, তবে আমরা আমাদের ফলাফলগুলিকে ক্যোরিয়ার সাথে সবচেয়ে ভাল মেলে তার দ্বারা অর্ডার করতে পারি।
এটি ভেক্টর স্পেস মডেলের ধারণা, এসকিউএল পূর্ণ-পাঠ্য অনুসন্ধানে কীভাবে কাজ করে তা দূরে নয়:
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;
}
মামলা 1
$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
)
CASE 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
)
CASE 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()
।
নোট বেন
শব্দগুলি অনুসন্ধান করার আগে redচ্ছিকভাবে অপ্রয়োজনীয়তা দূর করা
এর ফলে সূচকের আকার হ্রাস এবং কম সঞ্চয়ীকরণের প্রয়োজন হয়
কম ডিস্ক I / O
দ্রুত সূচীকরণ এবং ফলস্বরূপ দ্রুত অনুসন্ধান।
1. সাধারণীকরণ
2. স্টপওয়ার্ড নির্মূলকরণ
3. অভিধানের বিকল্প
অন্যদের সাথে শব্দগুলি প্রতিস্থাপন করুন যার অভিন্ন বা অনুরূপ অর্থ রয়েছে। (উদা: 'ক্ষুধার্ত' এবং 'ক্ষুধার্ত' এর উদাহরণগুলি 'ক্ষুধার্ত' দিয়ে প্রতিস্থাপন করুন)
শব্দগুলির প্রয়োজনীয় অর্থগুলিতে আরও হ্রাস করতে আরও অ্যালগরিদমিক ব্যবস্থা (স্নোবল) করা যেতে পারে।
তাদের হেক্সাডেসিমাল সমতুল্য রঙগুলির সাথে প্রতিস্থাপন
নির্ভুলতা হ্রাস করে সংখ্যার মান হ্রাস হ'ল পাঠকে স্বাভাবিক করার অন্যান্য উপায়।
রিসোর্সেস
আপনি যদি "ভুয়া" এবং "সত্যবাদী" সমস্যা এড়াতে চান তবে আপনি সাবস্ট্র_কাউন্ট ব্যবহার করতে পারেন:
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
এবং অনুরূপ ফাংশন উল্লিখিত Multibyte স্ট্রিং ফাংশন এখনো (2015-05-08)।
মূলত, যদি আপনার কিছু ভাষার সাথে বর্ণযুক্ত শব্দগুলি , যেমন জার্মান, ফরাসী, পর্তুগিজ, স্পেনীয় ইত্যাদি ইত্যাদির সন্ধান করতে সমস্যা হয় তবে (যেমন: ä , é , ô , ç , º , ñ ) আপনি পূর্ববর্তী হতে চাইতে পারেন সঙ্গে ফাংশন mb_
। সুতরাং, গৃহীত উত্তরটি পরিবর্তে ব্যবহার করতে হবে mb_strpos
বা mb_stripos
(কেস-সংবেদনশীল মিলের জন্য) পরিবর্তে:
if (mb_strpos($a,'are') !== false) {
echo 'true';
}
আপনি যদি গ্যারান্টি দিতে না পারেন যে আপনার সমস্ত ডেটা ইউটিএফ -8 এ 100% , আপনি mb_
ফাংশনগুলি ব্যবহার করতে পারেন ।
একটি ভাল নিবন্ধ বুঝতে কেন পরম নূন্যতম প্রতিটি সফটওয়্যার ডেভেলপার শুনে রাখ, ইতিবাচক ইউনিকোড এবং অক্ষর সেট (কোনো অজুহাত!) সম্পর্কে কি হবে দ্বারা জোএল স্পলস্কাই ।
পিএইচপি-তে, কোনও স্ট্রিংটিতে একটি নির্দিষ্ট সাবস্ট্রিং থাকে কিনা তা যাচাই করার সর্বোত্তম উপায় হ'ল এই জাতীয় সরল সহায়ক ফাংশনটি ব্যবহার করা:
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
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
শুরুতে
স্ট্রাস্টার () এবং স্ট্রাইস্টার () ব্যবহার করে স্ট্রিং থেকে শব্দের উপস্থিতি সন্ধান করার জন্য অন্য বিকল্পটি নীচের মত:
<?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";
}
উদাহরণস্বরূপ ইমেল প্রেরণের সময় স্প্যাম এড়াতে এটি কার্যকর useful
স্ট্রপোস ফাংশনটি দুর্দান্ত কাজ করে তবে আপনি যদি 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'
দ্রষ্টব্য: এখানে আমরা প্রতিটি চিহ্নের ক্রমের জন্য শব্দটি বোঝাতে চাই না।
শব্দের একটি ব্যবহারিক সংজ্ঞা হ'ল পিসিআরই নিয়মিত এক্সপ্রেশন ইঞ্জিন, যেখানে শব্দগুলি কেবল শব্দের সাথে মিলিত সাব-স্ট্রিংস, শব্দহীন অক্ষর দ্বারা পৃথক হয়ে থাকে।
একটি "শব্দ" অক্ষর হ'ল কোনও বর্ণ বা অঙ্ক বা আন্ডারস্কোর অক্ষর, অর্থাত্ যে কোনও অক্ষর যা পার্ল "শব্দের" অংশ হতে পারে। অক্ষর এবং অঙ্কগুলির সংজ্ঞাটি পিসিআরই এর অক্ষর সারণী দ্বারা নিয়ন্ত্রিত হয় এবং স্থানীয়-নির্দিষ্ট মিল থাকলে (..) পরিবর্তন হতে পারে