【cakePHP】配列を組み替える便利なHashクラス

cakePHP使っててうれしいのが、Hashクラスが組み込まれていることです。

これはとっても便利なので、他のフレームワークを使う時でももし同等のものがなければコピーして使おうかと思っています。

サンプルコード

いくつか簡単な例をあげます。

このような配列があるとして、

4番目のユーザーの名前を取り出したいとき

Result:

Userの下の配列は数値キーで0から始まっているので4番目を指定するには3になります。説明無用とは思いますが念のため。

idが2のユーザーの名前を取り出したいとき

[配列名=配列値]の書式で条件式を書けます。

Result:

配列名がなければ配列番号でもいけます

Result:

Hashクラスのマッチャで使える記号:

‘=’
‘!=’
‘>’
‘<‘
‘>=’
‘<=’

等号は==でなく=なので注意してください。

配列のキーをidにして必要なデータのみの配列を作りたい時

Result:

このようにすっきりした配列を作成できます。リンクリストなどを作るのに活躍します。

条件式で指定したデータの配列を生成する

combineとマッチャを組み合わせて使用するときに注意しないといけないのが、第2引数と第3引数、両方にマッチャを指定しないといけないことです。キーと値の数が合わないとfalseが返ってきます。

Result:

グループIDでグルーピングしたユーザー配列を生成する

2次元配列を作るにはcombineに引数を追加します。

Result:

group_idでユーザーを分けることが出来ましたね。

複雑な階層の多次元配列を扱う

不特定のキーを表すのに{n}と{s}があり、nが数値キー、sは文字列キーに対応しています。Hashパス構文の中に何個でも出現して構いません。

Result:

キャラクターの持つアイテムリストができました。idをキーとすることで重複は省かれています。

sptinrfの結果を値に入れる

Hash::formatを使えばsprintfの結果を取り出せます。

Result:

これをHash::combineでやるときには第3引数を配列にして、1番目にフォーマット文字列を入れます。

Result:

 

ほかにもいろいろ便利ですが

文字列を生成したり、配列に値を加えたり削除したり、非常にいろんなことができますが、抽出系に絞って書いてみました。

cakePHPの公式ドキュメント「Hash」をみれば全部書いてますが、サンプルが少ないのでちょっと分かりにくいかもと思うところもあります。

これを参考に、配列を自由に扱えるようになるとデータの扱いもぐっと幅がでてくることでしょう。

最後に、進撃の巨人のキャラクター名をサンプルに使ったのは深い意味はないのでその辺のツッコミは無用でお願いします。