PHPで知っておきたい!compactの使い方とテクニック

「配列をもっと簡単に作りたいな」
「いまいち配列のメリットが分からない」

ということを思っていませんか?

今回は、配列を作るときに便利な関数、compactの使い方とテクニックについて解説します。

ぜひ、参考にしてください。

compactの仕様

compactのリファレンスを確認してみます。

変数名とその値から配列を作成します。

各引数について、compact() は現在のシンボルテーブルにおいてその名前を有する変数を探し、 変数名がキー、変数の値がそのキーに関する値となるように追加します。 端的に言うと、extract() の逆の動作をします。

関数の引数は、以下のようになっています。

引数はいくつでも渡すことができ、その型は配列(array型)でも文字列(string型)でもOKです。

また、この関数が返す値は配列(array型)になっています。

compactの使い方

次に、具体的なcompactの使い方をプログラムと合わせて解説していきます。

 

例えばこんな配列を考えてみます。

 

ここでcompactを使って書き換えると、このようになります。

ここでのポイントは、

compactを使うときのポイントは、変数名から$マークを削除した文字列を引数として指定することです。

先の例とプログラムで言うと、$name→’name’という対応になります。

もし、変数名と対応しない文字列を指定すると、配列の要素にはなりません

このように変数名とキーが対応せずに、emailのキーのみが対応するようになっています。

compactが便利なシーン

そもそも別に配列を使わなくても開発はできるのでは?

と思う人もいるかもしません。

なので、compactの便利なシーンを解説する前に、ここで配列を使うことのメリットを抑えおきましょう。

配列を使うと、理解しやすいプログラムになる

実際の開発では、配列を使わないということはまずありません。

なぜなら、配列を使うと理解しやすいプログラムになるからです。

先ほど紹介したプログラムをもう一度、引用します。

このプログラムの配列について仕様をまとめると、このようになります。

ユーザ情報(user配列)として、名前(name)、メールアドレス(email)、住所(address)の3つの要素もつ配列です。
ここで他の人がコードを読んだときを考えてみます。

$user[‘name’]と$nameという変数名だと、$user[‘name’]の方が「ユーザの名前」という意味を推測しやすいです。

 

一方で、「$name」では「なにの名前を表現しているのか」を考えなければなりません。

$nameより$user[‘name’]の方が「ユーザの名前」を推測しやすい

 

そのプログラムが書かれるのは一度ですが、他の人から何度も読まれます。

他の人がプログラムを読むことを考えると、配列を使った方がいいです。

compactでタイプミスを減らす

compactを使うとタイプミスを減らすことができます。

例えばこのようなプログラムだと配列のキーとして、name、email、 addressという配列のキーを毎回、書くことになります。

一方で、compactを使って書くと変数名と配列のキーは同じものです。(これについてはcompactの使い方で解説しました。)

もしタイプミスすると、値を取得できないのでデバッグするときにも簡単に気づくことができます。

compactと逆の処理をするextract

compactに関連して、その逆の処理をするextractもここであわせて抑えておきましょう。

extractは、compactの逆の処理する関数です。

extractのリファレンスには、このようにあります。

配列からシンボルテーブルに変数をインポートします。

各キーについて変数名として有効であるかどうか、 そして、シンボルテーブルの既存の変数と衝突しないかどうかを確認します。

$name→’name’のような「変数名」→「配列のキー」にして配列を作るのがcompactでした。

これに対して、‘name’→$nameとして「配列のキー」→「変数名」にして、変数を作るのがextractです。

compactは、$name→’name’の対応で配列を作る
extractは、’name’→$nameの対応で変数を作る

具体的にプログラムで解説します。

extractの仕様として、引数に配列と、展開する配列をどのように展開するかのflag, prefixを渡すようになっています。

返り値として、展開できた配列の要素の数を返します。

詳しくはリファレンスを確認です。

実際にcompactが使われているプログラム

compactが実際にどんなプログラムがで使われているのか、解説します。

Laravelでは、compactが必須

Laravel では、コントローラーからビューに値を渡すときにcompactが便利です。

Laravelのドキュメントにあるプログラムを参考に解説します。

このプログラムでは、nameを配列のキーをとして、Jamesという要素を格納しています。

 

これをcompactを使って書き換えるとこのようになります。

Laravelでは、よく出てくる書き方ですので抑えておきたいところです。

まとめ

いかがでしたか?

今回は、「PHPで知っておきたい!compactの使い方とテクニック」についてご紹介しました。

これでcompactを使って、また一つ効率よくプログラムを書けるはずです。

ぜひ参考にしてみてくださいね。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?