W3docs

Понимание функции PHP "array_count_values"

Функция array_count_values в PHP подсчитывает количество вхождений каждого значения в array и возвращает ассоциативный array.

Функция PHP array_count_values() подсчитывает, сколько раз каждое значение встречается в array. Она возвращает новый ассоциативный array, в котором ключами являются уникальные значения из входного array, а значениями — количество вхождений каждого из них. Это самый быстрый способ построить таблицу частот (гистограмму значений) без написания цикла вручную.

В этой главе рассматриваются синтаксис, правила подсчёта значений, типичные подводные камни и практические рецепты, например поиск наиболее часто встречающегося элемента.

Синтаксис

array_count_values(array $array): array
ПараметрОписание
$arrayВходной array, значения которого нужно подсчитать. Подсчитываются только значения типов int и string.

Функция возвращает ассоциативный array пар значение => количество. Она не изменяет исходный array.

Базовый пример

Передайте array значений, и вы получите каждое уникальное значение вместе с его количеством:

php— editable, runs on the server

Вывод:

Array
(
    [red] => 2
    [green] => 1
    [blue] => 2
    [yellow] => 1
)

"red" и "blue" встречаются по два раза, а "green" и "yellow" — по одному. Исходные ключи array полностью игнорируются — имеют значение только сами значения.

Взаимодействие целочисленных и строковых ключей

Поскольку ключи PHP array могут быть только целыми числами или string, array_count_values() подсчитывает только значения типов int и string. Из этого вытекает один тонкий момент: числовая string вроде "1" и целое число 1 трактуются как один и тот же ключ, поэтому они подсчитываются вместе.

<?php

$mixed = array(1, "1", 1, "hello", "hello");
print_r(array_count_values($mixed));

?>

Вывод:

Array
(
    [1] => 3
    [hello] => 2
)

Целое число 1 и string "1" сливаются в единый ключ 1 со значением 3. Это отражает то, как PHP нормализует ключи array повсеместно.

Значения, которые нельзя подсчитать

Любое значение, не являющееся int или stringnull, boolean, числа с плавающей точкой, array или object — не может использоваться как ключ. PHP пропускает его и выдаёт предупреждение вместо подсчёта:

<?php

$values = array("a", "b", null, 3.5, "a");
print_r(@array_count_values($values));

?>

Вывод:

Array
(
    [a] => 2
    [b] => 1
)

Подсчитываются только string-значения; null и число с плавающей точкой 3.5 отбрасываются (реальный вызов выдаёт предупреждения "Can only count string and integer values"@ здесь используется лишь для чистоты вывода в примере). Если вам нужно подсчитывать другие типы, приведите или отфильтруйте данные заранее.

Практический рецепт: поиск наиболее часто встречающегося значения

Таблица частот делает тривиальным поиск моды (наиболее распространённого элемента). Отсортируйте количества по убыванию и возьмите первый ключ:

<?php

$votes = array("yes", "no", "yes", "yes", "no", "maybe");
$counts = array_count_values($votes);
arsort($counts);            // sort by count, highest first, keeping keys
$winner = array_key_first($counts);

echo "Winner: $winner ({$counts[$winner]} votes)";

?>

Вывод:

Winner: yes (3 votes)

Вы также можете передать результат напрямую в array_sum(), чтобы подтвердить итоговое число, или в max(), чтобы получить максимальное количество.

Подсчёт слов в строке

Распространённый вариант использования — построение карты частотности слов. Разбейте строку на слова с помощью explode(), затем выполните подсчёт:

<?php

$text = "the cat sat on the mat the cat ran";
$words = explode(" ", $text);
print_r(array_count_values($words));

?>

Вывод:

Array
(
    [the] => 3
    [cat] => 2
    [sat] => 1
    [on] => 1
    [mat] => 1
    [ran] => 1
)

Когда использовать

Используйте array_count_values() везде, где вам нужна гистограмма значений: подсчёт голосов, поиск дубликатов, построение облаков тегов или обнаружение наиболее/наименее распространённых элементов. Это быстрее и нагляднее, чем ручной цикл foreach с проверками isset(), и устраняет частый источник ошибок «на единицу».

Связанные функции

  • array_unique() — удаление дублирующихся значений (когда важно только какие значения существуют, а не сколько раз они встречаются).
  • array_keys() — извлечение уникальных значений после их преобразования в ключи.
  • array_sum() — суммирование количеств.
  • arsort() — сортировка полученной таблицы частот по количеству.

Практика

Практика
Какова функция array_count_values() в PHP?
Какова функция array_count_values() в PHP?
Was this page helpful?