PHP में वाक्य का पहला शब्द कैसे प्राप्त करें?


156

मैं एक स्ट्रिंग से चर का पहला शब्द निकालना चाहता हूं। उदाहरण के लिए, इस इनपुट को लें:

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

परिणामी आउटपुट होना चाहिए Test, जो इनपुट का पहला शब्द है। मैं यह कैसे कर सकता हूँ?


आपको s($str)->words()[0]मदद मिल सकती है , जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है ।
caw

जवाबों:


254

आप विस्फोट कार्य का उपयोग इस प्रकार कर सकते हैं :

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

चलो इसे 100 बनाते हैं, इसकी मदद मेरी :)
शिवम पंड्या

41
आधुनिक PHP सिंटैक्स का उपयोग करके आप बस कर सकते हैंexplode(' ',trim($myvalue))[0]
Elly Post

2
किसी भी पीएचपी संस्करण के लिए 1 लाइन कोड:list($firstword) = explode(' ', trim($myvalue), 1);
सेड्रिक फ्रांकोइस

3
@ CédricFrançoys limitपैरामीटर 2 होना चाहिए क्योंकि इसमें आखिरी तत्व को शामिल करना है जिसमें बाकी स्ट्रिंग शामिल हैं; 1 बस बहुत ही स्ट्रिंग वापस आ जाएगी। जब तक एक बड़ी सरणी नहीं बनाई जाएगी मैं एक लाइनर के लिए इलियट संस्करण के साथ जाऊंगा।
Sdlion

क्या होगा यदि आप दूसरे शब्द के साथ-साथ RSS NewYorkTimes - मीडिया: क्रेडिट भी चाहते हैं - <मीडिया: credit> द न्यू यॉर्क टाइम्स के लिए दिमित्री कोस्त्युकोव </ Media: credit>। मैं केवल दिमित्री कोस्त्युकोव चाहता हूं - मैं यह कैसे करूं? =)

282

एक स्ट्रिंग फंक्शन ( स्ट्रटोक ) है, जिसका उपयोग कुछ विभाजकों (ओं) के आधार पर एक स्ट्रिंग को छोटे स्ट्रिंग्स ( टोकन ) में विभाजित करने के लिए किया जा सकता है । इस धागे के प्रयोजनों के लिए, पहले शब्द (पहले स्थान के चरित्र के रूप में कुछ भी परिभाषित किया गया है) को अंतरिक्ष चरित्र पर स्ट्रिंग को टोकेTest me more द्वारा प्राप्त किया जा सकता है ।

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

अधिक विवरण और उदाहरणों के लिए, strtok PHP मैनुअल पेज देखें


3
Briliiant! मूल समाधान की तुलना में बेहतर
अल्बर्टो फोंटाना

यह पहला उत्तर होना चाहिए। यह केवल पहले शब्द को वापस लौटाता है जैसे वह एक क्लीनर तरीके से चाहता था।
वेस

2
अच्छा समाधान लेकिन php मैनुअल में, यह चेतावनी देता है: यह फ़ंक्शन बूलियन FALSE लौटा सकता है, लेकिन गैर-बूलियन मान भी लौटा सकता है जो FALSE का मूल्यांकन करता है।
जे। हैरिस

1
मैं कम से कम 6 साल के लिए दैनिक आधार पर PHP का उपयोग कर रहा हूं और मैंने अब तक इस फ़ंक्शन के बारे में कभी नहीं सुना है
Epoc

2
strtokएक अजीब और खतरनाक कार्य है जो एक वैश्विक स्थिति रखता है। इस समारोह का उपयोग हतोत्साहित किया जाना चाहिए।
अर्नोल्ड डेनियल

39

यदि आपके पास PHP 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
+1 विस्फोट या रेगेक्स (दोनों अनुचित imho) का उपयोग नहीं करने के लिए। एक और विकल्प str_replace के साथ स्ट्रैस का उपयोग करना होगा, कुछ के साथ स्ट्रैस से सुई के बाद के हिस्से को बदलना।
गॉर्डन

1
वर्थ नोटिंग, हालांकि यह strstrPHP में उपलब्ध है क्योंकि 4.3.0यह पहले नहीं था 5.3.0, जब वैकल्पिक पैरामीटर 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
NOTE- स्प्लिट () 5.3> से ली गई है
लियो


2
$ इनपुट = "मुझे और परखें";
echo preg_replace ("/ \ s। * $ /", "", $ इनपुट); // "परीक्षा"

2

व्यक्तिगत रूप से strsplit/ explode/ strtokशब्द सीमाओं का समर्थन नहीं करता है, इसलिए एक अधिक उच्चारण विभाजन प्राप्त करने के लिए नियमित अभिव्यक्ति का उपयोग करें\w

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

यह शब्दों को सीमाओं के साथ 1 की सीमा में विभाजित करेगा।


रॉबर्टपिट -> यदि आप एक उदाहरण देते हैं तो यह मददगार होगा जहां एक शब्द सीमा के साथ एक preg_split की तुलना में स्ट्रेटोक विफल हो गया।
मार्कोज़ेन

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

आप इसे सरणी में स्ट्रिंग संवहन के बिना PHP स्ट्रिंग फ़ंक्शन रूट का उपयोग कर सकते हैं।

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

// आउटपुट एस


चयन करने, सम्मिलित करने या अद्यतन करने के लिए क्वेरी ऑपरेशन को पहचानने के लिए MySQL क्वेरी का पहला अक्षर प्राप्त करने के लिए महान समाधान
Intacto

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

$ first_word = str_word_count (1) [0]

विशेष वर्णों पर काम नहीं करता है, और यदि विशेष वर्णों का उपयोग किया जाता है, तो गलत व्यवहार होगा। यह UTF-8 के अनुकूल नहीं है।

अधिक जानकारी के लिए PHP str_word_count () मल्टीबाइट सुरक्षित है?


0

चूंकि आप ऊपरी या निचले हिस्से के लिए स्ट्रोक के साथ जांच नहीं कर सकते हैं, यह पहले शब्द की जांच के लिए पूरी तरह से काम करता है।

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

0

आप सवाल का सुधार किया जा सकता है "स्ट्रिंग में पहली जगह और कुछ भी नहीं द्वारा पीछा सब कुछ"। तो यह एक सरल नियमित अभिव्यक्ति के साथ प्राप्त किया जा सकता है:

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

मैंने ltrim () को सुरक्षित करने के लिए एक वैकल्पिक कॉल जोड़ा है: यह फ़ंक्शन स्ट्रिंग की शुरुआत में रिक्त स्थान हटाता है।


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उनकी गति की तुलना करने के 1000000 पुनरावृत्तियों प्रत्येक के साथ)।

<?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

निष्कर्ष यह पता चलता है कि इन कार्यों के बीच की गति व्यापक रूप से भिन्न होती है और टेस्ट रन के अनुरूप नहीं होती है जैसा कि आप उम्मीद कर सकते हैं। इन त्वरित और गंदे परीक्षणों के अनुसार, चुने गए छह कार्यों में से किसी एक को उचित समय में काम मिल जाएगा। ऐसी अन्य प्रक्रियाएं चल रही हैं जिनमें निष्पादन समय के साथ हस्तक्षेप हो रहा है। तो बस एक प्रोग्रामर के रूप में जो भी फ़ंक्शन आपको सबसे व्यावहारिक और पठनीय समझ में आता है, उसका उपयोग करें। बड़ी प्रोग्रामिंग पिक्चर के लिए, डोनाल्ड नुथ का लिटरेट प्रोग्रामिंग देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.