Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】array_count_values()関数の使い方

array_count_values関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

『array_count_values関数は、配列に含まれる各値の出現回数を数え上げる処理を実行する関数です。この関数は、引数としてカウント対象の配列を一つ受け取ります。処理が成功すると、元の配列の値をキーとし、その値が配列内に何回出現したかを値とする新しい連想配列を返します。例えば、[1, "hello", 1, "world", "hello"] という配列を引数に渡した場合、[1 => 2, "hello" => 2, "world" => 1] という連想配列が返されます。この結果から、値1"hello"はそれぞれ2回、値"world"は1回出現したことがわかります。注意点として、この関数のキーとして使用できるのは、文字列型または整数型の値のみです。もし配列内にnullや浮動小数点数、オブジェクトなどのキーとして有効でない値が含まれている場合、警告が発生し、それらの値はカウントの対象外となります。データの分布を分析したり、重複する要素の数を調べたりする際に非常に便利な関数です。』

構文(syntax)

1<?php
2
3$result_array = array_count_values($input_array);
4
5?>

引数(parameters)

array $array

PHP:

  • array $array: 値の出現回数を数えたい配列

戻り値(return)

array

与えられた配列の要素をキーとし、その要素が配列内にいくつ出現するかを値とする連想配列を返します。

サンプルコード

PHP array_count_valuesで値ごとの出現回数を数える

1<?php
2
3/**
4 * PHPのarray_count_values関数の基本的な使用方法を示すサンプルスクリプト。
5 * この関数は、配列内の各要素の出現回数をカウントし、その結果を連想配列として返します。
6 * 結果の配列のキーは元の配列の値、値は出現回数になります。
7 */
8function demonstrateArrayCountValues(): void
9{
10    // 例1: 文字列の配列から要素の出現回数をカウント
11    $fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
12    echo "元のフルーツ配列:\n";
13    print_r($fruits);
14
15    // array_count_values関数を使用して、各フルーツの出現回数をカウントします。
16    // 例えば、'apple'が3回出現しているので、結果には 'apple' => 3 となります。
17    $fruitCounts = array_count_values($fruits);
18    echo "\n各フルーツの出現回数:\n";
19    print_r($fruitCounts);
20
21    // 例2: 数字の配列から要素の出現回数をカウント
22    $numbers = [1, 2, 3, 1, 4, 2, 1, 5, 3];
23    echo "\n元の数字配列:\n";
24    print_r($numbers);
25
26    // 数字の配列でも同様に、各数字の出現回数がカウントされます。
27    // 例えば、1が3回出現しているので、結果には 1 => 3 となります。
28    $numberCounts = array_count_values($numbers);
29    echo "\n各数字の出現回数:\n";
30    print_r($numberCounts);
31}
32
33// サンプル関数を実行します。
34demonstrateArrayCountValues();
35
36?>

PHP 8のarray_count_values関数は、配列内の各要素がどれだけ出現するかを数える機能を提供します。この関数は、引数としてカウント対象の配列($array)を一つ受け取ります。処理後には、元の配列の「値」を新しい連想配列の「キー」とし、その「出現回数」を「値」として持つ結果配列を返します。

サンプルコードでは、まずフルーツ名の配列$fruitsを例に、array_count_values関数がどのように機能するかを示しています。$fruits配列には'apple'が3回出現するため、関数の実行結果として得られる連想配列には'apple' => 3という要素が生成されます。同様に、数字の配列$numbersに対しても適用され、1が3回出現するため、結果配列に1 => 3という要素が含まれます。このように、この関数は、配列内の各要素の出現頻度を簡単に集計したい場合に非常に役立ちます。

array_count_values関数は、引数として渡された配列の各要素が何回出現したかを数え、その結果を連想配列として返します。このとき、結果の配列のキーは元の配列の要素の値、値はその出現回数となります。

この関数を利用する際の注意点として、カウントの対象となるのは数値、浮動小数点数、文字列といったスカラー値のみです。もし元の配列に別の配列やオブジェクトが含まれていた場合、それらはカウントされず、警告(E_WARNING)が発生することがあります。

また、PHPの配列のキーの特性により、数値と数値文字列(例えば1'1')は同じキーとして扱われ、それらは合算されてカウントされます。元の配列のキーは結果には影響しません。空の配列を渡した場合、戻り値も空の配列になりますので、処理時にはこれらの点を考慮してください。

PHP: 多次元配列の値出現回数を数える

1<?php
2
3declare(strict_types=1);
4
5/**
6 * 多次元配列に含まれるすべての値の出現回数を数えます。
7 *
8 * array_count_values() は1次元配列しか直接処理できません。
9 * この関数は、多次元配列をまず1次元配列に平坦化(フラット化)してから、
10 * array_count_values() を適用することで、多次元配列内の値の出現回数を数えます。
11 *
12 * @param array $multidimensionalArray 値を数える対象の多次元配列
13 * @return array 各値の出現回数を格納した連想配列
14 */
15function count_values_recursively(array $multidimensionalArray): array
16{
17    // 平坦化された値を格納するための配列を初期化します。
18    $flattenedArray = [];
19
20    // array_walk_recursive() を使い、多次元配列の全ての末端要素に対して処理を行います。
21    // クロージャー(無名関数)を使い、各値を $flattenedArray に追加します。
22    array_walk_recursive(
23        $multidimensionalArray,
24        function ($value) use (&$flattenedArray) {
25            $flattenedArray[] = $value;
26        }
27    );
28
29    // 平坦化された1次元配列を array_count_values() に渡して、値の出現回数を返します。
30    return array_count_values($flattenedArray);
31}
32
33// サンプルとして、各店舗のフルーツの販売データを多次元配列で定義します。
34$salesData = [
35    'tokyo_store' => ['apple', 'orange', 'apple'],
36    'osaka_store' => ['grape', 'orange', 'orange'],
37    'fukuoka_store' => ['apple', 'grape', 'banana'],
38];
39
40// 関数を実行して、全店舗で販売されたフルーツの合計数を計算します。
41$totalFruitCounts = count_values_recursively($salesData);
42
43// 結果を出力します。
44print_r($totalFruitCounts);
45
46/*
47 * 実行結果:
48 *
49 * Array
50 * (
51 *     [apple] => 3
52 *     [orange] => 3
53 *     [grape] => 2
54 *     [banana] => 1
55 * )
56 */
57

PHPの array_count_values 関数は、配列に含まれる各値の出現回数を数えるための便利な関数です。この関数は引数として配列を受け取り、値とその出現回数をペアにした新しい連想配列を返します。ただし、array_count_values は1次元の配列しか直接処理できないという制約があります。

このサンプルコードは、その制約を回避し、多次元配列に含まれるすべての値の出現回数を数える方法を示しています。そのために、count_values_recursively という独自の関数を定義しています。この関数は、まず array_walk_recursive 関数を利用して、引数で受け取った多次元配列を1次元の配列に変換(平坦化)します。array_walk_recursive は、多次元配列の階層をたどり、末端の要素一つひとつに対して指定した処理を実行します。ここでは、見つかった値をすべて新しい配列に格納しています。

その後、平坦化してできた1次元配列を array_count_values 関数に渡すことで、最終的に多次元配列全体での値の出現回数を集計しています。サンプルでは、店舗ごとのフルーツ販売データが格納された多次元配列から、全店舗を合算したフルーツごとの総販売数を算出しています。

array_count_values関数は1次元配列しか直接処理できないため、サンプルのように多次元配列を扱う場合は、array_walk_recursiveなどを用いて事前に1次元配列へ平坦化する必要があります。この関数のもう一つの重要な注意点は、カウントできる値が文字列と整数のみという制約です。小数やオブジェクトなどの値が含まれていると警告が発生し、集計から除外されるため、配列の中身を確認することが大切です。サンプルコードでは、無名関数内で外部の配列$flattenedArrayを更新するためにuseと参照渡し(&)が使われています。この記述がないと変数の値が変更されず、意図した結果になりません。

PHP: array_count_values で値の出現回数をカウント・ソートする

1<?php
2
3/**
4 * array_count_values を使用して配列内の値の出現回数をカウントし、
5 * その結果を出現回数の多い順にソートして表示します。
6 *
7 * @param array $inputArray カウント対象の配列
8 */
9function demonstrateArrayCountAndSort(array $inputArray): void
10{
11    echo "--- 元の配列 ---\n";
12    print_r($inputArray);
13
14    // array_count_values: 配列内の各値の出現回数をカウントします。
15    // 結果は「値 => 出現回数」の連想配列となります。
16    $valueCounts = array_count_values($inputArray);
17
18    echo "\n--- カウント結果 (ソート前) ---\n";
19    print_r($valueCounts);
20
21    // arsort: 連想配列を値 (ここでは出現回数) で降順 (大きい順) にソートします。
22    // キーと値の関連性は維持されます。
23    arsort($valueCounts);
24
25    echo "\n--- カウント結果 (出現回数の多い順にソート後) ---\n";
26    foreach ($valueCounts as $value => $count) {
27        echo "値 '{$value}' は {$count} 回出現しました。\n";
28    }
29}
30
31// サンプルデータ
32$sampleData = [1, 2, 2, 3, 1, 4, 2, 5, 3, 1, 'apple', 'banana', 'apple', 'orange'];
33
34// 関数を実行
35demonstrateArrayCountAndSort($sampleData);

PHPのarray_count_values関数は、配列内に含まれる各値が何回出現したかを数えるために使用されます。この関数は引数としてカウント対象の配列を受け取り、戻り値として「値 => 出現回数」の形式を持つ連想配列を返します。

提供されたサンプルコードでは、まずarray_count_values関数が$inputArray内の各値の出現回数を計算し、その結果を$valueCountsに格納しています。これにより、どの値が何回出現したかをキーと値のペアで効率的に把握できます。

次に、このカウント結果を出現回数の多い順にソートするためにarsort関数を使用しています。arsortは、連想配列の値を基準に降順(大きい順)で並べ替えることができ、ソート後も元のキーと値の関連性を維持します。この一連の処理によって、配列内のデータ傾向を出現回数の多い順に整理して表示することが可能になり、システムエンジニアを目指す初心者の方でもデータの傾向を分かりやすく把握できます。

このコードは、array_count_valuesで配列内の値の出現回数をカウントし、arsortでその結果を出現回数の多い順にソートして表示します。array_count_valuesは、入力配列の各値(整数、文字列など)をキー、その出現回数を値とする連想配列を返します。配列やオブジェクトは直接カウントされず、警告が発生する点にご注意ください。arsortは連想配列を「値」(この場合は出現回数)で降順にソートし、元のキーと値の関連性を維持します。入力配列が空の場合でもエラーにはなりませんが、空の連想配列が返されるため、結果が空であるかを確認するとより安全です。どちらの関数も戻り値は常に配列型であることを理解しておきましょう。

PHP連想配列の値出現回数を集計する

1<?php
2
3// ユーザー名(キー)と好きな果物(値)を格納した連想配列を準備します。
4$userFavoriteFruits = [
5    'Taro' => 'apple',
6    'Jiro' => 'banana',
7    'Hanako' => 'apple',
8    'Yoshiko' => 'orange',
9    'Saburo' => 'banana',
10    'Goro' => 'apple',
11];
12
13// array_count_values() は、連想配列の「値」の出現回数を集計します。
14// この例では、キー(ユーザー名)は無視され、値(果物名)がカウントされます。
15$fruitCounts = array_count_values($userFavoriteFruits);
16
17// 結果を出力します。
18// 元の配列の値であった果物名がキーとなり、その出現回数が値となる新しい連想配列が返されます。
19print_r($fruitCounts);
20
21/*
22--- 実行結果 ---
23Array
24(
25    [apple] => 3
26    [banana] => 2
27    [orange] => 1
28)
29*/

PHPの array_count_values() 関数は、配列内に各値が何回出現するかを集計するための関数です。

この関数は、引数として集計したい配列を一つ受け取ります。サンプルコードでは、ユーザー名をキー、好きな果物を値とする連想配列 $userFavoriteFruits を引数に渡しています。連想配列を引数にした場合、array_count_values() はキーを無視し、値のみを集計の対象とします。そのため、この例では 'Taro''Jiro' といったユーザー名ではなく、'apple''banana' といった果物名の出現回数がカウントされます。

関数の処理が完了すると、結果を格納した新しい連想配列が戻り値として返されます。この新しい連想配列では、元の配列で値だった要素(この例では果物名)がキーとなり、その出現回数が新しい値となります。サンプルコードの実行結果を見ると、'apple' は3回出現したため ['apple'] => 3 となり、'banana' は2回、'orange' は1回出現したことがわかります。このように、データ内の各要素の頻度を簡単に集計したい場合に非常に便利な関数です。

array_count_values関数は、連想配列のキーではなく、値の出現回数を集計します。サンプルコードのユーザー名のようなキーは完全に無視される点に注意してください。この関数が返す新しい配列では、元の配列の値(果物名)がキーとなり、その出現回数が値となります。また、この関数がカウントできる値は文字列と整数のみです。配列にnullや浮動小数点数などの値が含まれていると警告が発生するため、使用前に対象配列の値の型を確認することが、安全なコードを書く上で重要です。

関連コンテンツ

関連プログラミング言語