PHPで配列の要素数を数える!count()とsizeof()の使い方と注意点
生徒
「PHPで、配列の中にデータがいくつ入っているか調べる方法はありますか?」
先生
「はい、ありますよ。PHPには配列の要素数を数えるための専用の関数が用意されています。」
生徒
「関数、ですか。初心者でも簡単に使えるものなのでしょうか?」
先生
「もちろんです!count関数というものを使えば、一瞬で中身の個数がわかります。詳しく解説していきましょう。」
1. PHPの配列と要素数とは?
プログラミングの世界には、複数のデータをまとめて管理するための配列(はいれつ)という便利な仕組みがあります。例えば、クラスの名簿や、買い物リスト、一週間の天気予報など、関連するデータをひとまとめにしておく箱のようなイメージです。
この配列の中に、現在いくつのデータが入っているのかを知りたい場面は非常によくあります。これをプログラミング用語で要素数(ようそすう)と呼びます。要素数とは、単純に「中身の個数」のことだと考えて間違いありません。PHPでは、この個数を自動的に計算してくれる命令があらかじめ備わっています。
パソコンを触ったことがない方でも大丈夫です。引き出しの中にリンゴが何個入っているかを数えるのと同じ感覚で、プログラムに「数えて!」とお願いするだけで結果を教えてくれるのです。
2. count関数の基本的な使い方
PHPで最も一般的に使われるのがcount()という関数です。この関数の中に調べたい配列を入れるだけで、その配列が持っているデータの数を数字として返してくれます。
まずは、数値が入った単純な配列を数える例を見てみましょう。ここでは、ラッキーナンバーを格納した配列を用意しました。
$numbers = [10, 20, 30, 40, 50];
$result = count($numbers);
echo "配列の要素数は " . $result . " 個です。";
実行結果は以下のようになります。
配列の要素数は 5 個です。
このコードでは、$numbersという変数の中に5つの数字が入っています。count($numbers)と記述することで、PHPが中身を数え、その結果である「5」という数値を$resultという変数に代入しています。最後にechoを使って画面に表示させています。
3. sizeof関数の正体とcountとの違い
PHPの学習を進めていると、count()によく似たsizeof()という関数に出会うことがあります。「どちらを使えばいいの?」と迷う初心者の方も多いですが、結論から言うと、どちらを使っても結果は同じです。
実は、sizeof()はcount()の別名(エイリアス)です。別名とは、中身の処理は全く同じだけれど、名前だけが違う関数のことを指します。PHPの開発の歴史の中で、他のプログラミング言語を使っている人が馴染みやすいように用意されました。
しかし、PHPのコミュニティや一般的な開発現場では、count()を使うことが推奨されています。コードの読みやすさや一貫性を保つためにも、特別な理由がない限りはcount()を使うようにしましょう。初心者のうちは「sizeofという書き方もあるんだな」程度に覚えておけば十分です。
4. 多次元配列を数える時の注意点
配列の中には、さらに配列が入っている構造があります。これを多次元配列(たじげんはいれつ)と呼びます。例えば、「果物グループ」の中に「りんご、みかん」があり、「野菜グループ」の中に「キャベツ、トマト」があるような構造です。
通常のcount()では、一番外側の箱の数しか数えません。もし中身のすべての要素を合計して数えたい場合は、第2引数にCOUNT_RECURSIVEという指定をする必要があります。実際のコードで違いを確認してみましょう。
$food = [
"fruits" => ["apple", "orange", "grape"],
"vegetables" => ["carrot", "tomato"]
];
echo "通常のカウント: " . count($food) . "\n";
echo "再帰的なカウント: " . count($food, COUNT_RECURSIVE) . "\n";
実行結果は以下のようになります。
通常のカウント: 2
再帰的なカウント: 7
通常のカウントでは「fruits」と「vegetables」の2つのグループだけを数えています。一方で、再帰的なカウントでは、中の果物3つ、野菜2つ、そして親グループ2つの合計である「7」という結果になります。このように、数え方にはルールがあることを覚えておきましょう。
5. 要素数が0の場合の動作と空チェック
配列に何もデータが入っていない状態、つまり空の配列を数えるとどうなるでしょうか。答えは「0」が返ってきます。これは、プログラムの中で「データが存在するかどうか」を判定する際によく使われるテクニックです。
例えば、掲示板のサイトを作っているとして、投稿が1件もない場合に「投稿はありません」というメッセージを出したい時に活用できます。条件分岐(if文)と組み合わせて使ってみましょう。
$posts = []; // 空の配列
if (count($posts) === 0) {
echo "表示できる投稿がありません。";
} else {
echo count($posts) . "件の投稿があります。";
}
実行結果は以下のようになります。
表示できる投稿がありません。
配列の中身が空っぽであることを「要素数が0である」と定義して判定しています。このように、単に数を数えるだけでなく、その後の処理をどう分けるかを決めるためにcount()は非常に重要な役割を果たします。
6. count関数を使う際の引数のエラーに注意
以前のPHPのバージョンでは、配列以外のもの(例えば、単なる数字や文字列)をcount()に入れてもエラーにならないことがありましたが、最新のPHP(PHP 8.0以降)では厳格になっています。配列ではないものを数えようとすると、警告やエラーが発生する可能性があります。
そのため、変数が本当に配列であることを確認してから数えるのが、プログラミングにおける安全な書き方です。初心者のうちは、数えたい対象が「ちゃんと[]で囲まれた配列になっているか」を常に意識するようにしましょう。
また、大規模なデータを扱う場合、何万回も繰り返しcount()を呼び出すと、わずかに動作が遅くなることもあります。一度数えた結果を変数に保存しておくなど、効率の良い書き方を少しずつ学んでいくとステップアップに繋がります。
7. 文字列を扱う配列での具体的な例
数値だけでなく、文字(文字列)が入った配列でも使い方は全く同じです。ウェブサイトのメニュー項目などを配列で管理している場合を想定してみましょう。動的にメニューの数を表示させたい時に役立ちます。
$menu_items = ["ホーム", "会社概要", "サービス紹介", "お問い合わせ", "採用情報"];
$count_menu = count($menu_items);
echo "<ul>" . "\n";
echo " <li>現在のメニュー項目数は " . $count_menu . " 個です</li>" . "\n";
echo "</ul>";
実行結果は以下のようになります。
<ul>
<li>現在のメニュー項目数は 5 個です</li>
</ul>
このように、HTMLのタグと組み合わせて出力することで、ユーザーに現在の状態を分かりやすく伝えることができます。配列の要素数を数える技術は、お買い物サイトのカートの中身の個数を表示したり、検索結果の件数を表示したりと、インターネット上のあらゆる場所で使われています。
8. まとめ:配列の個数を把握して制御しよう
PHPで配列の要素数を数える方法について解説してきました。count()関数は、プログラミング未経験の方でも直感的に使いやすい非常に便利な命令です。まずは基本となる「数値を数える」「文字列を数える」といった操作から慣れていきましょう。
特に重要なポイントは、sizeof()との違いを理解し、基本的にはcount()を使うこと、そして多次元配列の場合は数え方に注意が必要だということです。これらをマスターすれば、データの数に合わせて動きを変える柔軟なプログラムが書けるようになります。実際のコードを自分で書いて、数字が変化する様子を確かめてみてくださいね。
まとめ
今回の記事では、PHPプログラミングにおいて避けては通れない非常に重要なテーマである「配列の要素数を数える方法」について詳しく解説してきました。Web開発の現場では、ユーザーがカートに入れた商品の数を出力したり、検索結果の総件数を表示したり、あるいはSNSのタイムラインに投稿がいくつあるかを確認したりと、配列のデータ個数(要素数)を取得する場面が数え切れないほど存在します。
PHPでこれらを実現するための中心的な存在がcount()関数です。この関数は引数に配列を渡すだけで、その中に格納されている要素の数を整数(int型)として返してくれる非常にシンプルかつ強力なツールです。プログラミング初心者の方でも、まずは「配列の中身がいくつあるか知りたいときはcountを使う」という一点を覚えるだけで、開発の幅が大きく広がります。
count()とsizeof()の使い分けとベストプラクティス
記事内でも触れた通り、PHPにはcount()と同じ機能を持つsizeof()という関数も存在します。これらは技術的には全く同じ動作をする「エイリアス(別名)」ですが、PHPの公式ドキュメントや一般的なコーディング規約においては、より意図が伝わりやすいcount()の使用が推奨されています。他の言語(C++など)の経験がある方はsizeof()に馴染みがあるかもしれませんが、PHPの標準的なスタイルに合わせることで、チーム開発などでも読みやすいコードになります。
多次元配列と再帰的カウントの仕組み
少し応用的な内容として、配列の中にさらに配列が含まれる「多次元配列」の数え方についても学びました。デフォルトのcount($array)では、直下にある要素(一番外側の箱)しか数えません。もし入れ子構造になっている中身まで全て合計して数えたい場合には、第2引数に定数COUNT_RECURSIVEを指定します。
$categories = [
"プログラミング" => ["PHP", "Java", "Python"],
"データベース" => ["MySQL", "PostgreSQL"]
];
// 通常のカウント(親要素のみ)
$normal_count = count($categories);
// 再帰的なカウント(子要素も含める)
$recursive_count = count($categories, COUNT_RECURSIVE);
echo "通常の要素数:" . $normal_count . "\n";
echo "全要素の合計:" . $recursive_count . "\n";
上記の実行結果は次のようになります。親要素の数だけでなく、子要素も合算される点に注目してください。
通常の要素数:2
全要素の合計:7
このように、データの構造に合わせて適切なカウント方法を選択することが、バグの少ない正確なプログラムを作るコツです。特にAPIから取得した複雑な多次元配列データを扱う際には、この引数の存在が非常に役立ちます。
PHP 8.0以降の厳密な型チェックへの対応
近年のPHPアップデート(特にPHP 8.0以降)により、count()関数はより厳格になりました。以前のバージョンでは配列以外の値を渡しても警告が出ないケースがありましたが、現在は配列(Array)またはCountableインターフェースを実装したオブジェクト以外を渡すと、エラーや警告が発生します。
安全なコードを書くためには、is_array()関数を使って「それが本当に配列かどうか」をチェックしてからcount()を呼び出す癖をつけると良いでしょう。これは「防御的プログラミング」と呼ばれ、予期せぬシステム停止を防ぐためのプロのテクニックです。
$data = null; // 何らかの理由でデータが空(null)になった場合
if (is_array($data)) {
echo "要素数は " . count($data) . " 個です。";
} else {
echo "データが配列ではありません。";
}
要素数が0の場合の挙動を利用して、条件分岐を作ることも非常に一般的です。if (count($array) === 0) という書き方は、リストが空であるかを確認する際の定石です。
さらなるステップアップに向けて
配列の要素数を数えることは、データ処理の基本中の基本です。これができるようになると、次は「ループ処理(foreach文など)」を組み合わせて、要素の数だけ繰り返し処理を行うといった高度な制御が可能になります。PHPの配列操作には、他にも要素を追加するarray_push()や、重複を削除するarray_unique()など、便利な関数が数多く用意されています。
まずはこのcount()関数を自由自在に使いこなせるようになり、データの個数に応じた動的なWebサイト制作に挑戦してみてください。プログラムが自分の意図通りに数字を弾き出し、画面に反映される楽しさを実感できるはずです。
生徒
「先生、ありがとうございました!count()関数って、本当にシンプルで使いやすいですね。これならすぐに覚えられそうです。」
先生
「そう言ってもらえると嬉しいです。プログラミングにおいて『数を数える』というのは、料理で言えば『計量』と同じくらい大切な基本なんですよ。」
生徒
「計量ですか。確かに、データが何個あるかわからないと、その後の処理も決められないですもんね。sizeof()も同じ意味だと知って安心しました。どっちを使うか迷わずに済みます。」
先生
「その通りです。基本はcount()で統一していきましょう。ところで、多次元配列を数える時の注意点は覚えていますか?」
生徒
「はい!普通のcount()だと、一番外側の箱しか数えないんですよね。中身の細かい要素まで全部数えたいときは、COUNT_RECURSIVEを魔法の言葉みたいに付け足せばいいんですよね?」
先生
「大正解です!よく理解できましたね。第2引数を指定するだけで動作が変わるという点は、他のPHP関数でもよく出てくるパターンなので慣れておくといいですよ。」
生徒
「あと、PHP 8.0からは配列じゃないものを数えようとすると怒られちゃうっていうのも気をつけます。is_array()で確認してから数えるようにすれば、より丁寧なプログラムになりますね。」
先生
「素晴らしい!その『丁寧さ』こそが、エラーの少ないシステムを作るエンジニアへの第一歩です。これからもその調子で、一つずつ確実にマスターしていきましょう。」
生徒
「はい、頑張ります!次は配列に要素を追加したり、特定のデータを取り出したりする方法も勉強してみたいです!」