मैं PHP में एक स्ट्रिंग के पहले n अक्षर कैसे प्राप्त कर सकता हूं? किसी विशिष्ट संख्या के लिए स्ट्रिंग को ट्रिम करने का सबसे तेज़ तरीका क्या है, और यदि आवश्यक हो तो '...' को जोड़ना चाहिए?
मैं PHP में एक स्ट्रिंग के पहले n अक्षर कैसे प्राप्त कर सकता हूं? किसी विशिष्ट संख्या के लिए स्ट्रिंग को ट्रिम करने का सबसे तेज़ तरीका क्या है, और यदि आवश्यक हो तो '...' को जोड़ना चाहिए?
जवाबों:
//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';
अपडेट करें:
लंबाई की जाँच करने के सुझाव के आधार पर (और छंटनी और अनट्रेंड स्ट्रिंग्स पर समान लंबाई सुनिश्चित करना):
$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;
तो आपको अधिकतम 13 वर्णों की एक स्ट्रिंग मिलेगी; या तो 13 (या उससे कम) सामान्य वर्ण या 10 वर्ण उसके बाद '...'
अपडेट 2:
या समारोह के रूप में:
function truncate($string, $length, $dots = "...") {
return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}
अपडेट 3:
जब से मैंने यह उत्तर लिखा है तब से कुछ समय हो गया है और मैं वास्तव में इस कोड का उपयोग नहीं करता हूं। मैं इस फ़ंक्शन को पसंद करता हूं जो फ़ंक्शन का उपयोग करके किसी शब्द के बीच में स्ट्रिंग को तोड़ने से रोकता है wordwrap
:
function truncate($string,$length=100,$append="…") {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
}
return $string;
}
$string = wordwrap($string, $length - sizeof($append));
?
यह कार्यक्षमता संस्करण 4.0.6 के बाद से PHP में बनाई गई है। डॉक्स देखें ।
echo mb_strimwidth('Hello World', 0, 10, '...');
// outputs Hello W...
ध्यान दें कि trimmarker
(ऊपर दी गई दीर्घवृत्त) छोटी लंबाई में शामिल है।
यदि आप स्ट्रिंग चार्ट पर नियंत्रण की आवश्यकता है, तो मल्टीबाइट एक्सटेंशन काम में आ सकता है।
$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
$string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
कभी-कभी, आपको स्ट्रिंग को अंतिम पूर्ण शब्द तक सीमित करने की आवश्यकता होती है: यानी आप नहीं चाहते कि अंतिम शब्द टूट जाए बजाय इसके कि आप दूसरे अंतिम शब्द के साथ रुकें।
उदाहरण: हमें "यह मेरा स्ट्रिंग है" को 6 वर्णों तक सीमित करने की आवश्यकता है, लेकिन 'यह i ... "के बजाय हम चाहते हैं कि यह' यह हो ..." अर्थात हम उस टूटे हुए अक्षरों को अंतिम शब्द में छोड़ देंगे।
पापा, समझाने में बुरा है, यहाँ कोड है।
class Fun {
public function limit_text($text, $len) {
if (strlen($text) < $len) {
return $text;
}
$text_words = explode(' ', $text);
$out = null;
foreach ($text_words as $word) {
if ((strlen($word) > $len) && $out == null) {
return substr($word, 0, $len) . "...";
}
if ((strlen($out) + strlen($word)) > $len) {
return $out . "...";
}
$out.=" " . $word;
}
return $out;
}
}
यदि आप शब्दों को विभाजित न करने के लिए सावधान रहना चाहते हैं, तो आप निम्नलिखित कार्य कर सकते हैं
function ellipse($str,$n_chars,$crop_str=' [...]')
{
$buff=strip_tags($str);
if(strlen($buff) > $n_chars)
{
$cut_index=strpos($buff,' ',$n_chars);
$buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
}
return $buff;
}
यदि $ str $ n_chars से कम है तो यह अछूता रहता है।
यदि $ str $ n_chars के बराबर है तो इसे वापस भी किया जाता है।
यदि $ str $ n_chars से अधिक लंबा है, तो यह कटौती करने के लिए अगले स्थान की तलाश करता है या (यदि अंत तक अधिक रिक्त स्थान नहीं है) $ str $ n_chars के बजाय अशिष्ट रूप से कट जाता है।
नोट: ध्यान रखें कि यह विधि HTML के मामले में सभी टैग को हटा देगी।
कोडाइन्गाइटर फ्रेमवर्क में इसके लिए एक सहायक होता है, जिसे "टेक्स्ट हेल्पर" कहा जाता है। यहां कोडाइनाइटर के उपयोगकर्ता गाइड से कुछ दस्तावेज हैं जो लागू होते हैं: http://codeigniter.com/user_guide/helpers/text_helper.html (बस वर्ड_limiter और character_limiter अनुभाग पढ़ें)। यहां आपके प्रश्न से संबंधित दो कार्य हैं:
if ( ! function_exists('word_limiter'))
{
function word_limiter($str, $limit = 100, $end_char = '…')
{
if (trim($str) == '')
{
return $str;
}
preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);
if (strlen($str) == strlen($matches[0]))
{
$end_char = '';
}
return rtrim($matches[0]).$end_char;
}
}
तथा
if ( ! function_exists('character_limiter'))
{
function character_limiter($str, $n = 500, $end_char = '…')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val.' ';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
}
}
}
}
सबस्ट्रिंग का उपयोग करें
http://php.net/manual/en/function.substr.php
$foo = substr("abcde",0, 3) . "...";
if(strlen($text) > 10)
$text = substr($text,0,10) . "...";
जिस फ़ंक्शन का मैंने उपयोग किया है:
function cutAfter($string, $len = 30, $append = '...') {
return (strlen($string) > $len) ?
substr($string, 0, $len - strlen($append)) . $append :
$string;
}
इसे एक्शन में देखें ।
मैंने इस उपयोग के लिए एक फ़ंक्शन विकसित किया
function str_short($string,$limit)
{
$len=strlen($string);
if($len>$limit)
{
$to_sub=$len-$limit;
$crop_temp=substr($string,0,-$to_sub);
return $crop_len=$crop_temp."...";
}
else
{
return $string;
}
}
आप स्ट्रिंग और लिमाइट
जैसे फ़ंक्शन को कहते हैं जैसे str_short("hahahahahah",5)
:;
यह आपके तार को काट देगा और अंत में "..." जोड़ देगा
:)
एक फ़ंक्शन (दोहराने के उपयोग के लिए) और डायनेमिक सीमित लंबाई के भीतर बनाने के लिए, उपयोग करें:
function string_length_cutoff($string, $limit, $subtext = '...')
{
return (strlen($string) > $limit) ? substr($string, 0, ($limit-strlen(subtext))).$subtext : $string;
}
// example usage:
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26);
// or (for custom substitution text
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26, '..');
यह आप की तरह कोड करने के लिए सबसे अच्छा है (नोटिस सीमा वैकल्पिक है और 10 तक चूक है):
print limit($string);
function limit($var, $limit=10)
{
if ( strlen($var) > $limit )
{
return substr($string, 0, $limit) . '...';
}
else
{
return $var;
}
}
$limit + 3
ताकि आप एक स्ट्रिंग को केवल सीमा पर ट्रिम न करें । आपके आवेदन पर निर्भर करता है (जैसे, HTML आउटपुट), …
इसके बजाय एक इकाई का उपयोग करने पर विचार करें (टाइपोग्राफिक रूप से अधिक सुखदायक)। जैसा कि पहले सुझाव दिया गया है, दीर्घवृत्त लागू करने से पहले (छोटा) स्ट्रिंग के अंत से किसी भी गैर-पत्र को ट्रिम करें। अंत में, देखें कि क्या आप मल्टीबाइट में हैं (जैसे, UTF-8) पर्यावरण - आप स्ट्रैलेन () और रूट () का उपयोग नहीं कर सकते हैं।
मुझे यकीन नहीं है कि यह सबसे तेज़ समाधान है, लेकिन ऐसा लगता है कि यह सबसे छोटा है:
$result = current(explode("\n", wordwrap($str, $width, "...\n")));
PS कुछ उदाहरण यहाँ देखें https://stackoverflow.com/a/17852480/131337
यह समाधान शब्दों में कटौती नहीं करेगा, यह पहले स्थान के बाद तीन डॉट्स जोड़ देगा। मैंने @ Raccoon29 समाधान का संपादन किया और मैंने सभी कार्यों को mb_ फ़ंक्शन से बदल दिया ताकि यह अरबी जैसी सभी भाषाओं के लिए काम करे
function cut_string($str, $n_chars, $crop_str = '...') {
$buff = strip_tags($str);
if (mb_strlen($buff) > $n_chars) {
$cut_index = mb_strpos($buff, ' ', $n_chars);
$buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
}
return $buff;
}
$yourString = "bla blaaa bla blllla bla bla";
$out = "";
if(strlen($yourString) > 22) {
while(strlen($yourString) > 22) {
$pos = strrpos($yourString, " ");
if($pos !== false && $pos <= 22) {
$out = substr($yourString,0,$pos);
break;
} else {
$yourString = substr($yourString,0,$pos);
continue;
}
}
} else {
$out = $yourString;
}
echo "Output String: ".$out;
यदि काटे गए तार की लंबाई पर कोई सख्त आवश्यकता नहीं है, तो व्यक्ति अंतिम शब्द को काटने और रोकने के लिए इसका उपयोग कर सकता है:
$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";
// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);
// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));
// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
इस मामले में, $preview
होगा "Knowledge is a natural right of every human being"
।
लाइव कोड उदाहरण: http://sandbox.onlinephpfunctions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713