পিএইচপি-তে কোনও বাক্যের প্রথম শব্দটি কীভাবে পাবেন?


156

আমি একটি স্ট্রিং থেকে ভেরিয়েবলের প্রথম শব্দটি বের করতে চাই। উদাহরণস্বরূপ, এই ইনপুট নিন:

<?php $myvalue = 'Test me more'; ?>

ফলস্বরূপ আউটপুট হওয়া উচিত Test, যা ইনপুটটির প্রথম শব্দ। কিভাবে আমি এটি করতে পারব?


এই স্ট্যান্ডলোন লাইব্রেরিতেs($str)->words()[0] যেমন পাওয়া যায় আপনি তেমন সহায়ক হতে পারেন ।
কাও

উত্তর:


254

আপনি বিস্ফোরণ ফাংশনটি নিম্নরূপ ব্যবহার করতে পারেন :

$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test

এটিকে 100 করা যাক, এটি আমাকে সহায়তা করুন :)
শিবাম পাণ্ড্য

41
আধুনিক পিএইচপি সিনট্যাক্স ব্যবহার করে আপনি কেবল করতে পারেনexplode(' ',trim($myvalue))[0]
এলি পোস্ট

2
যে কোনও পিএইচপি সংস্করণের জন্য 1 লাইন কোড:list($firstword) = explode(' ', trim($myvalue), 1);
সিড্রিক ফ্রাঙ্কোয়েস

3
@ CédricFrançoys limitপ্যারামিটারটি 2 হওয়া উচিত কারণ এটিতে স্ট্রিংয়ের বাকি উপাদানগুলি অন্তর্ভুক্ত করতে হবে; 1 শুধুমাত্র খুব একই স্ট্রিং ফিরে আসবে। যদি কোনও বড় অ্যারে তৈরি না করা হয় তবে আমি একটি লাইনারের জন্য এলিয়ট সংস্করণটি সহ যাব।
Sdlion

আপনি যদি দ্বিতীয় শব্দটির পাশাপাশি আরএসএস নিউইয়র্কটাইমস - মিডিয়া থেকেও চান তবে - ক্রেডিটটি হল - <মিডিয়া: ক্রেডিট> দ্য নিউ ইয়র্ক টাইমস </ মিডিয়া: ক্রেডিট> এর জন্য দিমিত্রি কোস্টিয়ুকভ। আমি কেবল দিমিত্রি কোস্টিয়ুকভকেই চাই - আমি কীভাবে এটি করব? =)

282

একটি স্ট্রিং ফাংশন ( স্ট্রটোক ) রয়েছে যা কিছু বিভাজক (গুলি) এর উপর ভিত্তি করে একটি স্ট্রিংকে ছোট স্ট্রিং ( টোকেন ) এ বিভক্ত করতে ব্যবহার করা যেতে পারে । এই থ্রেডের উদ্দেশ্যে, স্পেস অক্ষরের স্ট্রিং টোকানাইজ করে প্রথম শব্দটি (প্রথম স্থানের অক্ষরের আগে যে কোনও কিছু হিসাবে সংজ্ঞায়িত) Test me moreপাওয়া যায় ।

<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>

আরও বিশদ এবং উদাহরণের জন্য, strtok পিএইচপি ম্যানুয়াল পৃষ্ঠাটি দেখুন


3
Briliiant! আসল সমাধানের চেয়ে ভাল
আলবার্তো ফন্টানা

এটি প্রথম উত্তর হওয়া উচিত। এটি কেবল প্রথম শব্দটিই ফেরত দেয় যেমন তিনি ক্লিনার উপায়ে চেয়েছিলেন।
ওয়েস

2
ভাল সমাধান তবে পিএইচপি ম্যানুয়ালটিতে এটি সতর্ক করে: এই ফাংশনটি বুলিয়ান মিথ্যা প্রত্যাবর্তন করতে পারে, তবে একটি নন-বুলিয়ান মানও ফিরিয়ে দিতে পারে যা ফলসকে মূল্যায়ন করে।
জে হারিস

1
আমি কমপক্ষে 6 বছরের জন্য দৈনিক ভিত্তিতে পিএইচপি ব্যবহার করছি এবং আমি এখন পর্যন্ত এই ফাংশন সম্পর্কে কখনও শুনিনি
এপোক

2
strtokএকটি অদ্ভুত এবং বিপজ্জনক ফাংশন যা বিশ্বব্যাপী রাষ্ট্র ধারণ করে। এই ফাংশনটি ব্যবহার করে নিরুৎসাহিত করা উচিত।
আর্নল্ড ড্যানিয়েলস

39

আপনার পিএইচপি থাকলে 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 );

বা বিস্ফোরিত ব্যবহার করে যার এর অনেক উত্তর রয়েছে এটি ব্যবহার করে আমি কীভাবে এটি করব তা নির্দেশ করে বিরক্ত করব না।


1
বিস্ফোরণ বা রেজেক্স (উভয় অনুপযুক্ত imho) ব্যবহার না করার জন্য +1। আর বিকল্প হ'ল স্ট্রাস্টারকে স্ট্রাস্টার ব্যবহার করে স্ট্রাস্টার থেকে স্ট্রেসার থেকে কিছু না দিয়ে অংশটি প্রতিস্থাপন করা হবে।
গর্ডন

1
লক্ষণীয় বিষয়, যদিও strstrপিএইচপি-তে উপলব্ধ যেহেতু 4.3.0এটি আগে ছিল না 5.3.0, যখন alচ্ছিক প্যারামিটার before_needle(যা আপনি এই উদাহরণটিতে ব্যবহার করছেন) যুক্ত করা হয়েছিল। কেবল একটি নোটিশ, কারণ আমি বিভ্রান্ত ছিলাম, কেন আপনি বলেছেন যে এই উদাহরণটির প্রয়োজন 5.3.0
ট্রেন্ডার

মনে রাখবেন যে আপনি যদি কোনও একক শব্দের সাথে মাইভ্যালু সেট করেন তবে স্ট্রাস্টার এই ক্ষেত্রে কোনও কিছুই ফিরিয়ে দেয় না! সমাধানটি সর্বদা পরীক্ষিত স্ট্রিংয়ের শেষে একটি স্থান যুক্ত করা যায় যাতে এটি সর্বদা প্রথম শব্দটি নিয়ে আসে, এমনকি যদি স্ট্রিংয়ের একমাত্র শব্দ হয়!
প্যাট্রিক

1
শব্দের মধ্যে কেবল ফাঁকা স্থানগুলি ধরে নেওয়া ঝুঁকিপূর্ণ, আমি ট্যাবগুলিও অন্তর্ভুক্ত করব।

echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
এমনটি



7

একটি কম পদক্ষেপ সহ গৃহীত উত্তরের অনুরূপ:

$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];

//$first_word == 'Test'

5

কেবলমাত্র যদি আপনি নিশ্চিত না হন যে একটি শব্দ দিয়ে স্ট্রিং শুরু হয় ...

$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test

trim($input)এই উদাহরণে যথেষ্ট হবে: পি
জান্ডার্বার

4
<?php
  $value = "Hello world";
  $tokens = explode(" ", $value);
  echo $tokens[0];
?>

ইনপুটটির প্রতিটি শব্দ পেতে কেবল বিস্ফোরণটি ব্যবহার করুন এবং ফলাফলের অ্যারের প্রথম উপাদানটি আউটপুট দিন।


4

বিভক্ত ফাংশন ব্যবহার করেও আপনি প্রথম শব্দটি স্ট্রিং থেকে পেতে পারেন।

<?php
$myvalue ="Test me more";
$result=split(" ",$myvalue);
echo $result[0];
?>

5
নোট-বিভক্ত () 5.3>
লিও


2
$ ইনপুট = "আমাকে আরও পরীক্ষা করুন";
প্রতিধ্বনি প্রেগ_রেপ্লেস ("/। s। * $ /", "", $ ইনপুট); // "পরীক্ষা"

2

ব্যক্তিগতভাবে strsplit/ explode/ strtokশব্দের সীমানা সমর্থন করে না, সুতরাং আরও খণ্ডিত বিভাজন পেতে নিয়মিত অভিব্যক্তিটি ব্যবহার করুন\w

preg_split('/[\s]+/',$string,1);

এটি 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;

শুভেচ্ছা, সিল


এটি সেরা উত্তর হবে, যেহেতু এটি "এক, দুই এবং তিন" এর জন্যও কাজ করে (স্বীকৃত উত্তরটি "এক," প্রতিধ্বনিত হবে)
প্যাট্রিক

1
public function getStringFirstAlphabet($string){
    $data='';
    $string=explode(' ', $string);
    $i=0;
    foreach ($string as $key => $value) {
        $data.=$value[$i];
    }
    return $data;
}

1

আপনি পিএইচপি স্ট্রিং ফাংশন সাবস্ট্রাস্টার ব্যবহার করে স্ট্রিংকে অ্যারেতে না পাঠিয়ে এটি করতে পারেন।

 $string = 'some text here';
 $stringLength= strlen($string);
 echo ucfirst(substr($string,-$stringLength-1, 1));

// আউটপুট এস


মাইএসকিউএল কোয়েরির প্রথম চিঠিটি পাওয়ার জন্য দুর্দান্ত সমাধান, যেমন নির্বাচন, সন্নিবেশ বা আপডেটের মতো কোয়েরি ক্রিয়াকলাপটি স্বীকৃত করতে হবে
ইনট্যাকো

0
$str='<?php $myvalue = Test me more; ?>';
$s = preg_split("/= *(.[^ ]*?) /", $str,-1,PREG_SPLIT_DELIM_CAPTURE);
print $s[1];

0

ফাংশন যা স্ট্রিংকে দুটি অংশে টোকনাইজ করবে, প্রথম শব্দ এবং বাকী স্ট্রিং।

রিটার্ন মান: এটা করতে হবে 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;
}

0

$ প্রথম_শব্দ = str_word_count (1) [0]

বিশেষ অক্ষরগুলিতে কাজ করে না, এবং বিশেষ চরিত্রগুলি ব্যবহার করা হলে ভুল আচরণের ফলস্বরূপ। এটি ইউটিএফ -8 বন্ধুত্বপূর্ণ নয়।

আরও তথ্যের জন্য চেক কি পিএইচপি str_word_count () মাল্টিবাইট নিরাপদ?


0

যেহেতু আপনি উপরের বা ছোট হাতের জন্য স্ট্রোক দিয়ে পরীক্ষা করতে পারবেন না এটি প্রথম শব্দটি পরীক্ষা করার জন্য পুরোপুরি কাজ করে।

if (strtolower(strtok($text, " ")) == strtolower($firstword)){ .. }

0

আপনার প্রশ্নটি "প্রথম স্থানটিতে স্ট্রিংয়ের প্রতিস্থাপন এবং কিছুই দ্বারা অনুসরণ করা সমস্ত কিছু" হিসাবে সংস্কার করা যেতে পারে। সুতরাং এটি একটি সাধারণ নিয়মিত প্রকাশের মাধ্যমে অর্জন করা যেতে পারে:

$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));

নিরাপদ থাকার জন্য আমি ltrim () এ একটি alচ্ছিক কল যুক্ত করেছি: এই ফাংশনটি স্ট্রিংয়ের শুরুতে স্পেসগুলি সরিয়ে দেয়।


0

এখানে সমস্ত উত্তরগুলির মধ্যে এমন একটি পদ্ধতির ব্যবহার করা হচ্ছে যা প্রথম শব্দটি পাওয়া গেলেও প্রসেসরের সমস্ত স্ট্রিং অনুসন্ধান করা দরকার! বড় স্ট্রিংয়ের জন্য, এটি বাঞ্ছনীয় নয়। এই পদ্ধতির অনুকূল:

function getFirstWord($string) {
    $result = "";
    foreach($string as $char) {
        if($char == " " && strlen($result)) {
            break;
        }
        $result .= $char;
    }
    return $result;
}

0

আপনাকে জানতে হবে কিভাবে দ্রুত এই নিজ নিজ ফাংশন প্রতিটি চান, আমি কিছু অশোধিত পিএইচপি 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 এর শিক্ষিত প্রোগ্রামিং

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.