2011-10-06 24 views
0

我有一個20字的短語。有沒有關於PHP的CROP功能的話?

我想在10

crop它是否有此待機功能在PHP?

+0

如果字符串有連字符,應如何處理?例如。在你的上下文中是「用戶定義的」一個或兩個字嗎? –

回答

1

您可以將短語拆分爲一個數組,然後從數組中重建較短的短語;

$words = explode(" ", $bigphrase); 
$somewords = array_slice($words, 0, 10); 
$smallphrase = implode(" ", $somewords); 
+0

如果字符串在開頭有空格並且單詞之間有多個空格,那麼該怎麼辦?或'',''字之間? [正則表達式變體](http://stackoverflow.com/questions/7675616/is-there-on-php-a-crop-functions-for-the-words/7676313#7676313)。 – hakre

1
$exploded = explode(" ", $string); 
for($i = 0; $i < 10;$i++){ 
    echo $exploded[$i]." "; 
} 
+3

如果字符串少於10個單詞,則會在末尾添加不必要的空格... –

+0

如果字符串在前面(或中間多個)包含空格,則它甚至不會返回前10個單詞。 – hakre

2
$cropped = implode(' ', array_slice(str_word_count($text, 1), 0, 10)); 
2
$cropped = implode(" ", array_splice(explode(" ", $input), 0, 10)); 
+0

'$ input ='我的單詞有很多間隔:),你能幫助它嗎?或者這是不可能的嗎?';' – hakre

1

您可以創建一個拆分字符串到一個數組,然後返回字符串的函數。 這樣的事情應該去做

function crop($str, $length) { 
    $str = explode(" ", $str); 
    return implode(" " , array_slice($str, 0, $length)); 
} 
0

不,我不這麼認爲,但你可以做這樣的事情:

<?php 
function strcrop($str, $words = 10) 
{ 
    if(substr_count($str, ' ') > 10) 
     return substr($str, 0, strpos($str, ' ', $words)); 
    return $str; 
} 
+0

問題是獲得前10個單詞而不是基於字符... –

+0

我已經完成了與其他解決方案相同的工作,但未對原始字符串造成爆炸和內爆。 – SnatchFrigate

+0

雖然我做了一些改進,但如果沒有更改,只有不到10個單詞,它會中斷。 – SnatchFrigate

1

不使用數組,你可以做到這一點(可能工作得更快,尚未測試)。

<?php 
    $myText = "Lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"; 

    $result = cropWords($myText, 10); 
    if($result !== false) { 
     echo $result; 
    } 

    function cropWords($text, $cropPosition) { 
     $counter = 0; 
     $position = 0; 
     while($counter++ < $cropPosition) { 
      $position += strpos(substr($text, $position), " "); 
      if($position === false) { 
       return false; 
      } else { 
       $position++; 
      } 
     } 
     return trim(substr($text, 0, $position)); 
    } 
?> 
1

不,在PHP中,字符串中的單詞沒有裁剪功能。 PHP甚至不知道一個單詞是什麼,你也沒有指定。

因此,我假設正則表達式中的單詞或單詞字符符合您的需求。如果是這樣的話,你可以只匹配前10個字,串並刪除其餘部分:

$string = preg_replace('~^\W*(\w+(?:\W+\w+){0,9}+).*$~', '$1', $string); 

這工作,以及與前面或詞之間的多個的非單詞字符。