【PHP入門】配列の要素数を数える方法をマスターしよう!

こんにちは!エンジニアのオータケです!

PHPでWebサイトを構築する際に配列をよく使うかと思います。
その配列を扱う際に配列の要素数が幾つか知りたいと思ったことありますよね?

この記事では

・count/sizeof関数を使って配列の要素数を取得する方法
・count関数の便利な使い方

といった基本的な内容から

・array_count_values関数を使い配列の値の出現回数を調べる方法
・array_fill関数を使い要素数を決めて配列を初期化する方法

といった応用的な解説もします。

今回はそんな配列の要素数について、わかりやすく解説します!

目次

配列の要素数を数える

countとは

まず、配列の要素数を知るためにはcount関数を使うことで知ることができます。

このcount関数ですが使い方がとても簡単です。

書き方:

int count ( $配列 [, モード ] )

引数:
第一引数には対象の$配列を指定します。
第二引数にはカウント時のモードをしています。COUNT_RECURSIVE (または 1) を指定した場合は、再帰的にカウントが行われます。

返り値:
配列の要素数を返します。
配列がセットされていない場合や、空の配列として初期化されている場合は0を返します。

countの使い方

では実際にサンプルコードをみてみましょう。

サンプルプログラム1

$array = [1, 2, 3, 4];
echo count($array);

実行結果:

4

このコードでは配列に1,2,3,4という値を入れて初期化しています。

そしてcount関数を使い要素数を取得しているというものです。

配列には4つの要素があるためこのcount関数を呼び出した結果は4になります。

とても簡単ですよね?

では次にcount関数の便利な使い方を見てみましょう。

サンプルプログラム2

$array = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
 
echo count($array, COUNT_RECURSIVE);

実行結果:

12

このコードでは先程とは少し違い第二引数に何やらCOUNT_RECURSIVEという値を渡しています。

そして実行結果は12と表示されます。

実はcount関数を呼び出す際にCOUNT_RECURSIVEという値を指定することで多次元配列を再帰的にカウントしてくれるのです。

わかりやすく言えば、複雑な配列の構造であっても全ての要素数をカウントしてくれるという設定になります。

では今回なぜ12という結果が返ってきたかを解説します。

まず1~9までの配列の要素数がそれぞれ9個、そして[1, 2, 3]と[4, 5, 6]、[7, 8, 9]の3つの配列があるということで「9+3」で12個という結果になっています。

ぱっと見、9個と勘違いしてしまいそうですがそうではないので注意が必要ですね。

もしこのCOUNT_RESURSIVEを指定しないで前回のコードのようにcount関数を呼んだ場合、3になります。

なぜ、3となるのかですがこれは配列変数$arrayの中に[1, 2, 3]と[4, 5, 6]、[7, 8, 9]の3つの配列が入っているため実行結果では3と表示されます。

sizeofとは

次にsizeof関数を使って配列の要素数を知る方法を解説します。

書き方:

int count ( $配列 [, モード ] )

sizeof関数はcount関数のエイリアスで基本処理はほぼ同じです。

sizeofの使い方

以下にsizeof関数を使用して、配列の要素数を数えるサンプルを紹介します。

サンプルプログラム

$array = [1, 2, 3, 4];
echo sizeof($array);

実行結果:

4

前項の一番最初のサンプルコードとの違いとしてはcount関数がsizeofに変わったくらいです。

それもそのはず。
このsizeof関数は内部的にcount関数を呼んでおり実際にはcount関数を呼んでいることに変わりはありません。

ではなぜこのような関数があるかですが、これはC言語にsizeof関数がありこういったプログラマに対する配慮ではないかと考えます。

ちなみに先程のcount関数の第二引数で指定したCOUNT_RESURSIVEも使うことができます。

配列の値の出現回数を知る

array_count_valuesとは

array_count_values関数は、配列の値をキーとしてそのキーの出現回数を調べるときに使用します。

書き方:

array array_count_values( $配列名 )

引数:
値を数えるための配列を指定します。

返り値:
配列の値をキーとして、その出現回数を組み合わせた連想配列を返します。

array_count_valuesの使い方

以下にarray_count_values関数を使用して、配列の値をカウントするサンプルを紹介します。

サンプルプログラム

$array1 = [1, 'apple', 2, 'orange', 1, 'melon', 3, 'apple', 2, 'pineapple'];

$array2 = array_count_values($array1);

print_r($array2);

実行結果:

Array
(
    [1] => 2
    [apple] => 2
    [2] => 2
    [orange] => 1
    [melon] => 1
    [3] => 1
    [pineapple] => 1
)

実行結果のとおり、配列の値をキーに配列の値がカウントされているのがわかりますね!

あらかじめ要素数を決めて初期化する

少し話は変わりますが要素数を決めて配列を初期化したい場合にどうすればよいでしょうか?

今までは既にある配列の要素数を知るという方法でした。

この項ではあらかじめ要素数を決めた上で配列の値を初期化する方法について見ていきましょう。

array_fillとは

配列を指定した要素数と値で作成するにはarray_fill関数を使用します。

書き方:

array array_fill( $開始位置 , $要素数 , $値 )

引数:
第一引数には配列の最初のインデックスを指定します。
第二引数には配列の要素数を指定します。要素数は0以上の値である必要があります。
第三引数には配列の要素に使用する値を指定します。

返り値:
指定した値で埋めた配列を返します。

array_fillの使い方

以下にarray_fill関数を使用して、配列を指定した要素数と値で初期化するサンプルを紹介します。

サンプルプログラム

$new_array = array_fill(0, 10, 0);
print_r($new_array);

実行結果:

Array
(
    [0] => 0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
)

このコードではarray_fill関数を使って要素数を決めて特定の値で埋めています。

3行目の第1引数で0を渡していますがこれは要素番号が何番目から始まるかを指定しています。

第2引数はいくつの要素で初期化するかを決めています。
今回は10個の要素で初期化をするという処理を書いています。

第3引数は初期化する値を決めています。
今回は0で初期化しています。

そしてこのarray_fill関数は戻り値として新しい配列を生成して返す仕組みとなっています。

このようにすることで要素数を決めて配列を初期化することができます。
最初から配列の要素数が決まっている場合はこのような形で書いてもいいかもしれません。

配列についてもっと詳しく知りたい方へ

配列のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

・PHPの配列について
・配列の作成・初期化方法
・配列をコピーする方法
・ループで要素を取得する方法
・配列の先頭の要素を取得する方法
・配列の要素が空か判定する方法
・配列を比較する方法
・配列に値を追加する方法
・配列の要素数を調べる方法

まとめ

いかがでしょうか。

配列の要素数を知る方法を解説しました。

count関数を使えば簡単に配列の要素数を知ることができましたね!

もし、配列の要素数について知りたいときはこの記事について思い出してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次