PHPで配列の全ての値が空かどうかを判定する方法

メールフォームを作ってて、こんなケースにぶち当たった。

  • 必須入力ではない。
  • 複数の項目に分かれている(配列)。
  • 配列が全て空かどうか判定したい。

それで、調べてみたところ「PHPで配列のすべての値が空なのか確認する - Develog - Webアプリケーション、インフラに関する記録」という記事を見つけたけど、しっくりこなかったので、色々調べてみました。

具体的にはこんなのを判定する。

住所($_POST['住所'])
郵便番号($_POST['住所']['郵便番号'])
都道府県($_POST['住所']['都道府県'])
市区町村・番地建物($_POST['住所']['市区町村・番地建物'])

入力しなくてもいいけど、入力するなら全部入力してもらわないと困るっていうやつです。

それで判定方法だけど、count関数との組み合わせでこんなにありました↓。

  • count関数 + array_filter関数
    <?php if(count(array_filter($_POST['住所'])) == 0) {} ?>
  • count関数 + array_keys関数
    <?php if(count(array_keys($_POST['住所'], '')) == 0) {} ?>
  • count関数 + array_values関数
    <?php if(count(array_values($_POST['住所'])) == 0) {} ?>
  • count関数 + array_unique関数
    <?php if(count(array_unique($_POST['住所'])) == 0) {} ?>

array_filter関数は、第2引数のコールバックを指定しないとif文で偽となるもの(論理型のFALSE, 整数の0や負の値, 空の値, NULL値)を削除した配列を返すので、count関数との組み合わせで 0 が返れば、全て空ということになります。

array_keys関数は、第2引数に値を指定すると、その値を含むキーのみを返します。第2引数に空の値を指定して、count関数で 0 が返れば、全て空ということになります。

array_values関数は、全ての値を取り出し数値添字をつけた配列を返します。このとき、空の値は削除されるので、count関数で 0 が返れば、全て空ということになります。

array_unique関数は、値が重複しない新規配列を返します。空の値が複数あれば削除されるので、count関数で 0 が返れば、全て空ということになります。

もっと他にやりかたがあるかもしれません。

こういう発見があるから、プログラミングは楽しいですね。