Php: сортировка и подсчет экземпляров слов в заданной строке

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

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

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

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

There are $count instances of $word

Итак, чтобы этот цикл вывел:

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

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

Есть два примера джина....

Ответ 1

Используйте комбинацию 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
)

Ответ 2

Попробуйте следующее:

$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.