जवाबों:
आप विस्फोट कार्य का उपयोग इस प्रकार कर सकते हैं :
$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 PHP मैनुअल पेज देखें ।
strtokएक अजीब और खतरनाक कार्य है जो एक वैश्विक स्थिति रखता है। इस समारोह का उपयोग हतोत्साहित किया जाना चाहिए।
यदि आपके पास 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 );
या विस्फोट का उपयोग करना, जिसके बहुत सारे उत्तर हैं, इसका उपयोग करके मैं यह इंगित करने में परेशान नहीं करूँगा कि यह कैसे करना है।
strstrPHP में उपलब्ध है क्योंकि 4.3.0यह पहले नहीं था 5.3.0, जब वैकल्पिक पैरामीटर before_needle(जो आप इस उदाहरण में उपयोग कर रहे हैं) को जोड़ा गया था। सिर्फ एक सूचना, क्योंकि मैं उलझन में था, आप क्यों कहते हैं, कि इस उदाहरण की आवश्यकता है 5.3.0।
echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
भले ही इसमें थोड़ी देर हो, लेकिन PHP के पास इसके लिए एक बेहतर उपाय है:
$words=str_word_count($myvalue, 1);
echo $words[0];
एक कम कदम के साथ स्वीकृत उत्तर के समान:
$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];
//$first_word == 'Test'
व्यक्तिगत रूप से 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;
}
आप इसे सरणी में स्ट्रिंग संवहन के बिना PHP स्ट्रिंग फ़ंक्शन रूट का उपयोग कर सकते हैं।
$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;
}
$ first_word = str_word_count (1) [0]
विशेष वर्णों पर काम नहीं करता है, और यदि विशेष वर्णों का उपयोग किया जाता है, तो गलत व्यवहार होगा। यह UTF-8 के अनुकूल नहीं है।
अधिक जानकारी के लिए PHP str_word_count () मल्टीबाइट सुरक्षित है?
आप सवाल का सुधार किया जा सकता है "स्ट्रिंग में पहली जगह और कुछ भी नहीं द्वारा पीछा सब कुछ"। तो यह एक सरल नियमित अभिव्यक्ति के साथ प्राप्त किया जा सकता है:
$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));
मैंने ltrim () को सुरक्षित करने के लिए एक वैकल्पिक कॉल जोड़ा है: यह फ़ंक्शन स्ट्रिंग की शुरुआत में रिक्त स्थान हटाता है।
यहां सभी जवाब एक दृष्टिकोण का उपयोग कर रहे हैं कि प्रोसेसर को सभी स्ट्रिंग की खोज करने की आवश्यकता है, भले ही पहला शब्द मिल जाए! बड़े तार के लिए, यह अनुशंसित नहीं है। यह दृष्टिकोण इष्टतम है:
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उनकी गति की तुलना करने के 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
निष्कर्ष यह पता चलता है कि इन कार्यों के बीच की गति व्यापक रूप से भिन्न होती है और टेस्ट रन के अनुरूप नहीं होती है जैसा कि आप उम्मीद कर सकते हैं। इन त्वरित और गंदे परीक्षणों के अनुसार, चुने गए छह कार्यों में से किसी एक को उचित समय में काम मिल जाएगा। ऐसी अन्य प्रक्रियाएं चल रही हैं जिनमें निष्पादन समय के साथ हस्तक्षेप हो रहा है। तो बस एक प्रोग्रामर के रूप में जो भी फ़ंक्शन आपको सबसे व्यावहारिक और पठनीय समझ में आता है, उसका उपयोग करें। बड़ी प्रोग्रामिंग पिक्चर के लिए, डोनाल्ड नुथ का लिटरेट प्रोग्रामिंग देखें ।
s($str)->words()[0]मदद मिल सकती है , जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है ।