2009-07-11 17 views
7

यहां मैं जो करने की कोशिश कर रहा हूं वह यहां है। मेरे पास टेक्स्ट का एक ब्लॉक है और मैं मध्य में शब्दों को काट दिए बिना स्ट्रिंग से पहले 50 शब्दों को निकालना चाहता हूं। यही कारण है कि मैं पात्रों के विरोध वाले शब्दों को पसंद करूंगा, तो मैं बस एक बाएं() फ़ंक्शन का उपयोग कर सकता हूं।मैं php में स्ट्रिंग से केवल शब्दों की एक निर्धारित संख्या कैसे प्राप्त करूं?

मुझे पता है कि str_word_count ($ var) फ़ंक्शन स्ट्रिंग में शब्दों की संख्या वापस कर देगा, लेकिन मैं केवल पहले 50 शब्दों को कैसे वापस लाऊंगा?

मैं PHP पर पूर्ण विसर्जन जा रहा हूं और मैं अभी तक कई स्ट्रिंग फ़ंक्शंस से परिचित नहीं हूं।

अग्रिम धन्यवाद, जेसन

उत्तर

15

मैं बेसलाइन के रूप में शब्दों की संख्या का उपयोग करने के खिलाफ सिफारिश करेंगे। आप अधिक कम या अधिक प्रदर्शित करने के इरादे से अधिक डेटा आसानी से समाप्त कर सकते हैं।

अतीत में उपयोग किया गया एक दृष्टिकोण वांछित लंबाई के लिए पूछना है, लेकिन सुनिश्चित करें कि यह किसी शब्द को छोटा नहीं करता है। यहाँ कुछ है कि आप के लिए काम कर सकते हैं क्या है:

function function_that_shortens_text_but_doesnt_cutoff_words($text, $length) 
{ 
    if(strlen($text) > $length) { 
     $text = substr($text, 0, strpos($text, ' ', $length)); 
    } 

    return $text; 
} 

कहा, यदि आप str_word_count से पीछे नहीं पैरामीटर के रूप में 1 गुजरती हैं, यह सब शब्दों से युक्त एक सरणी वापस आ जाएगी, और आप उस पर सरणी हेरफेर का उपयोग कर सकते हैं। इसके अलावा, आप कर सकते हैं, हालांकि, यह कुछ हकी है, रिक्त स्थान पर स्ट्रिंग को विस्फोट कर रहा है ... लेकिन यह त्रुटि के लिए बहुत सारे कमरे पेश करता है, जैसे चीजें जो शब्दों के रूप में गिनती नहीं होती हैं।

पीएस। यदि आपको उपरोक्त फ़ंक्शन के यूनिकोड सुरक्षित संस्करण की आवश्यकता है, और उसके पास mbstring या iconv एक्सटेंशन इंस्टॉल हैं, तो बस सभी स्ट्रिंग फ़ंक्शंस को उनके mb_ या iconv_ प्रीफ़िक्स्ड समकक्षों से प्रतिस्थापित करें।,

function get_len_of_word($str,$number) { $array_str = explode(" ", $str); if(isset($array_str[$number])) { return implode(" ",array_slice($array_str, 0, $number)); } return $str; }

+0

सभी प्रतिक्रियाएं गुणवत्ता हैं, लेकिन आपने समझाया कि मुझे शब्दों के बजाय वर्णों से क्यों जाना चाहिए। धन्यवाद! – JasonBartholme

+0

वैसे, आप उस स्थिति को संबोधित नहीं करते हैं जहां पहले '$ लंबाई' वर्णों में कोई स्थान नहीं है, और आप अभी भी * अधिक * कम डेटा के साथ समाप्त कर सकते हैं, यदि आप केवल एक ही स्थान प्रदर्शित करना चाहते हैं चौथा चरित्र या तो (समाधान के लिए मेरा जवाब देखें)। – Zarel

+0

ईमानदारी से, मैंने इस विधि का उपयोग करने के लिए, यह कभी भी कभी भी एक मुद्दा नहीं होगा। अच्छा बिंदु, यद्यपि। – jason

8

str_word_count एक वैकल्पिक पैरामीटर है कि यह बताता है कि वापस जाने के लिए ले जाता है।

$len = min(50, count($words)); 
$first_fifty = array_slice($words, 0, $len); 
3

क्या आप वाकई शब्दों की एक निश्चित संख्या चाहते हैं:

$words = str_word_count($var, 1); 

तो फिर तुम बातें की तरह कुछ के साथ काट कर सकते हैं:

तार कि शब्द हैं की एक सरणी देता है? आप एक "पूर्वावलोकन" की तरह कुछ कर रहे हैं, यह आम तौर पर की तरह "300 अक्षर तक, एक शब्द सीमा पर कट" कुछ करने के लिए बेहतर है, इस स्थिति में आप की तरह कुछ का उपयोग कर सकते हैं:

if (strlen($str)>300) 
{ 
    $str = substr($str,0,300); 
    $pos = strrpos($str, ' '); 
    if ($pos !== false && $pos > 200) // If there is no space in the last 100 chars, just truncate 
    $str = substr($str,0,$pos); 
    // You may also want to add ellipses: 
    // $str .= '...'; 
} 
+0

हाय, जो कोई भी मेरा उत्तर नीचे modded, आप समझा सकता है क्या इसके साथ गलत क्या है? मैं मानता हूं कि यह जेसन के जवाब के रूप में लगभग विस्तृत नहीं है, लेकिन मुझे इसके साथ कुछ भी गलत नहीं दिख रहा है ... – Zarel

+0

आपको मेरा वोट मिला, लेकिन अगर कोई जगह नहीं है तो आप क्या करना चाहते हैं? – Thinker

+0

असल में, मैंने उस स्थिति को संबोधित किया। मैंने इसे उस विशिष्ट पंक्ति पर टिप्पणी करने के लिए संपादित किया है जिसमें मैं करता हूं। – Zarel

2

मैं यह करने के लिए आसान रास्ता मिल गया है

echo get_first_num_of_words("Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid, illo?", 5); 

आउटपुट: Lorem ipsum dolor sit amet

यह फ़ंक्शन अरबी वर्णों जैसे यूनिकोड वर्णों के साथ भी बहुत अच्छी तरह से काम करता है।

echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100); 

आउटपुट: نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.

1

यहाँ एक और उदाहरण है

function getWordsFromString($str,$word_count) 
{ 
    $new_str=$str; 
    $_strArr=explode(" ",$str); 
    $_tempArr=array(); 
    if(count($_strArr)>$word_count) 
    { 
     foreach ($_strArr as $key=> $value) { 
      $_tempArr[]=$value; 
      if($key==$word_count-1) 
      { 
       $new_str=implode(" ",$_tempArr).' ...'; 
      } 
     } 
    } 
    return $new_str; 
} 
0
function get_first_num_of_words($string, $num_of_words) 
    { 
     $string = preg_replace('/\s+/', ' ', trim($string)); 
     $words = explode(" ", $string); // an array 

     // if number of words you want to get is greater than number of words in the string 
     if ($num_of_words > count($words)) { 
      // then use number of words in the string 
      $num_of_words = count($words); 
     } 

     $new_string = ""; 
     for ($i = 0; $i < $num_of_words; $i++) { 
      $new_string .= $words[$i] . " "; 
     } 

     return trim($new_string); 
    } 

इस तरह इसका इस्तेमाल:

संबंधित मुद्दे