PHP

【CakePHP3】Hash(ハッシュ)クラスをコード例と合わせて解説!!

CakePHPを使っている人なら少しは知っておきたいHashクラス。

もちろんHashクラスを利用しなくてもプログラムを書く上で困るようなことはないのですが、利用すれば今までやっていた面倒な配列の操作をカンタンにできるんです。

というわけで今回はHashクラスを実際に使ってみたコードを見ながら説明していきたいと思います。

そもそもHashクラスってなんぞや?

HashクラスはCakePHPで用意されている、配列操作をカンタンにするためのクラスです。

通常の配列操作では以下のような配列から、

『ageが50ものだけを取り出したい』というときには、

という処理をしなければいけませんでしたよね。

もちろん自分でカンタンに配列を操作できる関数を作ってあげてもいいのですが、

管理を人に任せるときには、その人が他人が独自で作った関数まで理解しなくてはいけません。

これではCakePHPという『フレームワーク』を使用している意味が半減してしまいます。

そこでHashクラスのような、『フレームワークを理解している人なら誰でも使える配列をカンタンに操作できる機能があったらよくない?』となるわけです。

CakePHPのHashクラスのページ: https://book.cakephp.org/2.0/ja/core-utility-libraries/hash.html

Hashクラスのカンタンな説明

Hashクラスの詳細な説明に入る前に、カンタンな説明をしておきたいと思います。

・Hashクラス: 『use Cake\Utility\Hash』 で使用できるようになる。

Hashクラスのメソッドは、staticなので『Hash::メソッド名()』という風に使います。(staticとはインスタンスを生成しなくても使用できるメソッドのことです。)

Hashクラスのメソッドを紹介

・get(): 配列から一つだけの値を取り出すときに使用します。

・extract(): get()をさらに便利にしたものです。引数に条件をしてすることで、それを満たすデータを配列から自由に取り出すことができます。

・insert(): 配列にデータを自由に挿入するメソッド。

・remove(): 配列のデータを自由に削除するメソッド。

・combine(): 連想配列を作るメソッド。

・format(): 配列からデータを取り出して、指定したフォーマットで初期化した配列を作るメソッド。

他にも、contains()やcheck()、sort()など、便利なメソッドがたくさんあります。

Hashパス構文

Hashクラスを自由に配列からデータを取り出すには、『Hashパス構文』というものを使います。

『Hashパス構文』とはHashクラスのメソッドを使うときに、『配列からどのようなデータを取り出すか?』ということを記述するために使います。

Hashパス構文は『式』と『マッチャー』で構成されます。

式の種類

https://book.cakephp.org/2.0/ja/core-utility-libraries/hash.htmlより引用

マッチャーの種類

https://book.cakephp.org/2.0/ja/core-utility-libraries/hash.htmlより引用

上記2つの画像のような定義だけをみても、サッパリだという人がほとんどだと思うので、

実際にHashクラスのメソッドを使っているコード例を見ながら理解してから見直した方がいいと思います。

Hashクラスのメソッドを実際に使用してみる

というわけで、実際にHashクラスのメソッドを使用してみました。

メソッドが多いので、主要なメソッドに絞って使用しています。

当然ですが、コードの最初に『use Cake\Utility\Hash』とすることを忘れないでくださいね。

操作する配列は以下です。

 

Hash::get()

get()メソッドは引数に操作する配列と適用する構文を入れて使用します。マッチャーを使用することはできず、式だけが使えます。

これを適用した配列を見てみると、以下のようになります。

$test_1:

$test_2:

$test_3:

 

Hash::extract()

extract()はget()をさらに便利にしたもので、マッチャーも式も使用することができます。

これを実行すると、

$test_4:

$test_5:

$test_6:

$test_7:

という感じになります。

Hash::insert()

insert()は配列にデータを挿入するために使われるメソッドです。

これを実際に実行してみると、

1回目(変更部分だけ抜粋しています):

2回目(変更部分だけ抜粋しています):

3回目:

 

Hash::remove()

remove()は配列から条件にあったデータを削除してくれるメソッドです。

これを実行してみると、

1回目:

2回目:

変化なし。

3と4回目:
Array()

5回目:

 

まとめ

今回はCakePHPの便利なクラスであるHashクラスについて解説してきましたが、どうでしたでしょうか?

Hashクラスを使用すれば今までのようなforループやif文などを駆使しなくても配列をカンタンに操作できることが可能になります。

最初は覚えるのが少し面倒かもしれませんが、覚えるととっても便利なメソッドなのでオススメです。

もし間違いやわからない点がありましたら、気軽にコメントに残していってください。