2013-07-17 3 views
1

ОК, это то, что мне нужно ...Получить X первые/последние слова из строки

Пример ввода:

$str = "Well, I guess I know what this # is : it is a & ball";

Результат:

  • firstWords($str,5) должен вернуть Array("Well","I","guess","I","know")
  • lastWords($str,5) должен вернуть Array("is","it","is","a","ball")

Я попытался с помощью пользовательских регулярных выражений и str_word_count, но я до сих пор чувствую, как будто я что-то не хватает.

Любые идеи?

+1

Почему бы не 'explode()' строка и собрать элементы из массива, то ?? – swapnesh

+0

str_word_count и preg_split - это то, что сразу приходит в голову. Что вам не хватает? Все, что вам нужно, - это нарезать массив слов (array_slice) – adhominem

ответ

6

Все, что вам нужно, это

$str = "Well, I guess I know what this # is : it is a & ball"; 
$words = str_word_count($str, 1); 

$firstWords = array_slice($words, 0,5); 
$lastWords = array_slice($words, -5,5); 

print_r($firstWords); 
print_r($lastWords); 

Выход

Array 
(
    [0] => Well 
    [1] => I 
    [2] => guess 
    [3] => I 
    [4] => know 
) 

Array 
(
    [0] => is 
    [1] => it 
    [2] => is 
    [3] => a 
    [4] => ball 
) 
+1

+1 для 'str_word_count' – DevZer0

0
function cleanString($sentence){ 
    $sentence = preg_replace("/[^a-zA-Z0-9 ]/","",$sentence); 
    while(substr_count($sentence, " ")){ 
     str_replace(" "," ",$sentence); 
    } 
    return $sentence; 
} 

function firstWord($x, $sentence){ 
    $sentence = cleanString($sentence); 
    return implode(' ', array_slice(explode(' ', $sentence), 0, $x)); 
} 

function lastWord($x, $sentence){ 
    $sentence = cleanString($sentence); 
    return implode(' ', array_slice(explode(' ', $sentence), -1*$x)); 
} 
+1

Похоже, что OP просто нуждается в словах и игнорировать такие символы, как запятые 'Well' not' Well ', а также '&' ':' и '# 'нужно игнорировать, так что взрыва на пространстве не будет работать лучше здесь –

+0

ах, я пропустил это. обновил мой код с помощью функции хромой позы. он все равно будет иметь проблемы с «Я» и тому подобное, но некоторые символы могут быть добавлены в белый список регулярных выражений – lePunk

0

Вот для firstWord:

function firstWords($word, $amount) 
    { 
     $words = explode(" ", $word); 
     $returnWords = array(); 

     for($i = 0; $i < count($words); $i++) 
     { 
      $returnWords[] = preg_replace("/(?![.=$'€%-])\p{P}/u", "", $words[$i]); 
     } 

     return $returnWords; 
    } 

для lastWords обратный цикл.