2010-06-06 2 views
15

Мне нужна помощь в сортировке и подсчете экземпляров слов в строке.php: сортировка и подсчет экземпляров слов в заданной строке

Допустит, у меня есть коллекция на словах:

счастливых красивые счастливых линий Груши джин счастливых линий рока счастливых линий груши

Как я могу использовать PHP для подсчета каждого экземпляра каждого слова строка и выводить его в цикле:

There are $count instances of $word 

Так что выше петля выведет:

Есть 4 примера счастливых.

Существует 3 экземпляра линий.

Есть 2 экземпляра джин ....

ответ

50

Используйте комбинацию str_word_count() и array_count_values():

$str = 'happy beautiful happy lines pear gin happy lines rock happy lines pear '; 
$words = array_count_values(str_word_count($str, 1)); 
print_r($words); 

дает

Array 
(
    [happy] => 4 
    [beautiful] => 1 
    [lines] => 3 
    [pear] => 2 
    [gin] => 1 
    [rock] => 1 
) 

1 в str_word_count() делает функцию возвращает массив всех найденных слов.

Чтобы отсортировать записи, используйте arsort() (она сохраняет ключи):

arsort($words); 
print_r($words); 

Array 
(
    [happy] => 4 
    [lines] => 3 
    [pear] => 2 
    [rock] => 1 
    [gin] => 1 
    [beautiful] => 1 
) 
+0

Вау, это было умно. –

+0

+1 действительно ... – zaf

+0

Как я могу использовать это с акцентом? Пример: Épée –

5

Попробуйте это:

$words = explode(" ", "happy beautiful happy lines pear gin happy lines rock happy lines pear"); 
$result = array_combine($words, array_fill(0, count($words), 0)); 

foreach($words as $word) { 
    $result[$word]++; 
} 

foreach($result as $word => $count) { 
    echo "There are $count instances of $word.\n"; 
} 

Результат:

There are 4 instances of happy. 
There are 1 instances of beautiful. 
There are 3 instances of lines. 
There are 2 instances of pear. 
There are 1 instances of gin. 
There are 1 instances of rock. 
Смежные вопросы