উত্তর:
আপনি বিস্ফোরণ ফাংশনটি নিম্নরূপ ব্যবহার করতে পারেন :
$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
প্যারামিটারটি 2 হওয়া উচিত কারণ এটিতে স্ট্রিংয়ের বাকি উপাদানগুলি অন্তর্ভুক্ত করতে হবে; 1 শুধুমাত্র খুব একই স্ট্রিং ফিরে আসবে। যদি কোনও বড় অ্যারে তৈরি না করা হয় তবে আমি একটি লাইনারের জন্য এলিয়ট সংস্করণটি সহ যাব।
একটি স্ট্রিং ফাংশন ( স্ট্রটোক ) রয়েছে যা কিছু বিভাজক (গুলি) এর উপর ভিত্তি করে একটি স্ট্রিংকে ছোট স্ট্রিং ( টোকেন ) এ বিভক্ত করতে ব্যবহার করা যেতে পারে । এই থ্রেডের উদ্দেশ্যে, স্পেস অক্ষরের স্ট্রিং টোকানাইজ করে প্রথম শব্দটি (প্রথম স্থানের অক্ষরের আগে যে কোনও কিছু হিসাবে সংজ্ঞায়িত) Test me more
পাওয়া যায় ।
<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>
আরও বিশদ এবং উদাহরণের জন্য, strtok পিএইচপি ম্যানুয়াল পৃষ্ঠাটি দেখুন ।
strtok
একটি অদ্ভুত এবং বিপজ্জনক ফাংশন যা বিশ্বব্যাপী রাষ্ট্র ধারণ করে। এই ফাংশনটি ব্যবহার করে নিরুৎসাহিত করা উচিত।
আপনার পিএইচপি থাকলে 5.3
$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);
মনে রাখবেন যে যদি $myvalue
একটি শব্দের সাথে একটি স্ট্রিং থাকে তবে strstr
এই ক্ষেত্রে কোনও কিছুই ফেরত আসে না। একটি সমাধান হতে পারে পরীক্ষার স্ট্রিংয়ের জন্য একটি স্থান যুক্ত করা:
echo strstr( $myvalue . ' ', ' ', true );
এটি সর্বদা স্ট্রিংয়ের প্রথম শব্দটি ফিরিয়ে আনবে, এমনকি যদি স্ট্রিংটিতে কেবল একটি শব্দ থাকে
বিকল্পটি হ'ল কিছু:
$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );
বা বিস্ফোরিত ব্যবহার করে যার এর অনেক উত্তর রয়েছে এটি ব্যবহার করে আমি কীভাবে এটি করব তা নির্দেশ করে বিরক্ত করব না।
strstr
পিএইচপি-তে উপলব্ধ যেহেতু 4.3.0
এটি আগে ছিল না 5.3.0
, যখন alচ্ছিক প্যারামিটার before_needle
(যা আপনি এই উদাহরণটিতে ব্যবহার করছেন) যুক্ত করা হয়েছিল। কেবল একটি নোটিশ, কারণ আমি বিভ্রান্ত ছিলাম, কেন আপনি বলেছেন যে এই উদাহরণটির প্রয়োজন 5.3.0
।
echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
যদিও এটি সামান্য দেরীতে হয়েছে তবে পিএইচপি এর কাছে এর জন্য আরও একটি ভাল সমাধান রয়েছে:
$words=str_word_count($myvalue, 1);
echo $words[0];
একটি কম পদক্ষেপ সহ গৃহীত উত্তরের অনুরূপ:
$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];
//$first_word == 'Test'
কেবলমাত্র যদি আপনি নিশ্চিত না হন যে একটি শব্দ দিয়ে স্ট্রিং শুরু হয় ...
$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test
trim($input)
এই উদাহরণে যথেষ্ট হবে: পি
ব্যক্তিগতভাবে strsplit
/ explode
/ strtok
শব্দের সীমানা সমর্থন করে না, সুতরাং আরও খণ্ডিত বিভাজন পেতে নিয়মিত অভিব্যক্তিটি ব্যবহার করুন\w
preg_split('/[\s]+/',$string,1);
এটি 1 এর সীমাতে শব্দগুলিকে বিভক্ত করবে।
$string = ' Test me more ';
preg_match('/\b\w+\b/i', $string, $result); // Test
echo $result;
/* You could use [a-zA-Z]+ instead of \w+ if wanted only alphabetical chars. */
$string = ' Test me more ';
preg_match('/\b[a-zA-Z]+\b/i', $string, $result); // Test
echo $result;
শুভেচ্ছা, সিল
public function getStringFirstAlphabet($string){
$data='';
$string=explode(' ', $string);
$i=0;
foreach ($string as $key => $value) {
$data.=$value[$i];
}
return $data;
}
আপনি পিএইচপি স্ট্রিং ফাংশন সাবস্ট্রাস্টার ব্যবহার করে স্ট্রিংকে অ্যারেতে না পাঠিয়ে এটি করতে পারেন।
$string = 'some text here';
$stringLength= strlen($string);
echo ucfirst(substr($string,-$stringLength-1, 1));
// আউটপুট এস
$str='<?php $myvalue = Test me more; ?>';
$s = preg_split("/= *(.[^ ]*?) /", $str,-1,PREG_SPLIT_DELIM_CAPTURE);
print $s[1];
ফাংশন যা স্ট্রিংকে দুটি অংশে টোকনাইজ করবে, প্রথম শব্দ এবং বাকী স্ট্রিং।
রিটার্ন মান: এটা করতে হবে first
এবং remaining
কী $return
যথাক্রমে অ্যারে। strpos( $title," ") !== false
স্ট্রিংয়ের কেবল একটি শব্দ থাকলে এবং এর মধ্যে কোনও স্থান না থাকায় প্রথম চেক বাধ্যতামূলক।
function getStringFirstWord( $title ){
$return = [];
if( strpos( $title," ") !== false ) {
$firstWord = strstr($title," ",true);
$remainingTitle = substr(strstr($title," "), 1);
if( !empty( $firstWord ) ) {
$return['first'] = $firstWord;
}
if( !empty( $remainingTitle ) ) {
$return['remaining'] = $remainingTitle;
}
}
else {
$return['first'] = $title;
}
return $return;
}
$ প্রথম_শব্দ = str_word_count (1) [0]
বিশেষ অক্ষরগুলিতে কাজ করে না, এবং বিশেষ চরিত্রগুলি ব্যবহার করা হলে ভুল আচরণের ফলস্বরূপ। এটি ইউটিএফ -8 বন্ধুত্বপূর্ণ নয়।
আরও তথ্যের জন্য চেক কি পিএইচপি str_word_count () মাল্টিবাইট নিরাপদ?
আপনার প্রশ্নটি "প্রথম স্থানটিতে স্ট্রিংয়ের প্রতিস্থাপন এবং কিছুই দ্বারা অনুসরণ করা সমস্ত কিছু" হিসাবে সংস্কার করা যেতে পারে। সুতরাং এটি একটি সাধারণ নিয়মিত প্রকাশের মাধ্যমে অর্জন করা যেতে পারে:
$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));
নিরাপদ থাকার জন্য আমি ltrim () এ একটি alচ্ছিক কল যুক্ত করেছি: এই ফাংশনটি স্ট্রিংয়ের শুরুতে স্পেসগুলি সরিয়ে দেয়।
এখানে সমস্ত উত্তরগুলির মধ্যে এমন একটি পদ্ধতির ব্যবহার করা হচ্ছে যা প্রথম শব্দটি পাওয়া গেলেও প্রসেসরের সমস্ত স্ট্রিং অনুসন্ধান করা দরকার! বড় স্ট্রিংয়ের জন্য, এটি বাঞ্ছনীয় নয়। এই পদ্ধতির অনুকূল:
function getFirstWord($string) {
$result = "";
foreach($string as $char) {
if($char == " " && strlen($result)) {
break;
}
$result .= $char;
}
return $result;
}
আপনাকে জানতে হবে কিভাবে দ্রুত এই নিজ নিজ ফাংশন প্রতিটি চান, আমি কিছু অশোধিত পিএইচপি 7.3 ছয় উপর মাপকাঠিতে সবচেয়ে উত্তর এখানে ভোট দৌড়ে ( strpos
সঙ্গে substr
, explode
সঙ্গে current
, strstr
, explode
সঙ্গে trim
, str_word_count
এবং strtok
তাদের গতি তুলনা করার 1,000,000 পুনরাবৃত্তিও প্রতিটি সহ)।
<?php
$strTest = 'This is a string to test fetching first word of a string methods.';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$p = strpos($strTest, ' ');
$p !== false ? $strTest : substr( $strTest, 0, $p );
}
$after = microtime(true);
echo 'strpos/ substr: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
strstr($strTest, ' ', true);
}
$after = microtime(true);
echo 'strstr: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
current(explode(' ',$strTest));
}
$after = microtime(true);
echo 'explode/ current: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$arr = explode(' ',trim($strTest));
$arr[0];
}
$after = microtime(true);
echo 'explode/ trim: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
str_word_count($strTest, 1);
}
$after = microtime(true);
echo 'str_word_count: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
strtok($value, ' ');
}
$after = microtime(true);
echo 'strtok: '.($after-$before)/$i . ' seconds<br>';
?>
এখানে টানা 2 রান থেকে ভিন্ন ফলাফল রয়েছে:
strpos/ substr: 6.0736894607544E-8 seconds
strstr: 5.0434112548828E-8 seconds
explode/ current: 3.5163116455078E-7 seconds
explode/ trim: 3.8683795928955E-7 seconds
str_word_count: 4.6665270328522E-6 seconds
strtok: 4.9849510192871E-7 seconds
strpos/ substr: 5.7171106338501E-8 seconds
strstr: 4.7624826431274E-8 seconds
explode/ current: 3.3753299713135E-7 seconds
explode/ trim: 4.2293286323547E-7 seconds
str_word_count: 3.7025549411774E-6 seconds
strtok: 1.2249300479889E-6 seconds
এবং ফলগুলি ক্রমের বিপরীতকরণের পরে ফলাফল:
strtok: 4.2612719535828E-7 seconds
str_word_count: 4.1899878978729E-6 seconds
explode/ trim: 9.3175292015076E-7 seconds
explode/ current: 7.0811605453491E-7 seconds
strstr: 1.0137891769409E-7 seconds
strpos/ substr: 1.0082197189331E-7 seconds
উপসংহার এটি দেখা যাচ্ছে যে এই ফাংশনগুলির মধ্যে গতিটি বিস্তৃত হয় এবং টেস্ট রানগুলির মধ্যে ততটা সামঞ্জস্যপূর্ণ নয় যেমনটি আপনি আশা করতে পারেন। এই দ্রুত এবং নোংরা পরীক্ষা অনুযায়ী, ছয়টি বাছাই করা ফাংশনগুলির মধ্যে যে কোনও একটি যথাযথ সময়ে কাজটি সম্পন্ন করবে। অন্যান্য প্রক্রিয়াগুলি চালিত হওয়ার সময়গুলিতে হস্তক্ষেপ চালিয়ে যাওয়া সহ অন্যান্য বিতর্ক রয়েছে। সুতরাং প্রোগ্রামার হিসাবে আপনার কাছে যে কোনও ফাংশন সর্বাধিক ব্যবহারিক এবং পাঠযোগ্য বোধগম্য তা কেবল ব্যবহার করুন। বড় প্রোগ্রামিং ছবি জন্য, দেখুন ডোনাল্ড Knuth এর শিক্ষিত প্রোগ্রামিং ।
s($str)->words()[0]
যেমন পাওয়া যায় আপনি তেমন সহায়ক হতে পারেন ।