こんにちは!フリーエンジニアのヤマシタです。
CakePHPでは複雑な配列の処理を簡単に操作できる、Hashクラスがあります。
この記事では、
・Hashクラスとは?
・指定したデータを取得する方法
・配列の中に配列を挿入する方法
・配列を削除する方法
・配列同士を比較する方法
などのHashクラスの概要やHashクラスでよく使われるメソッドなどを解説していきます!
Hashクラスはよく使用する配列操作をより簡単に行うことができますので、この機会にぜひ覚えておきましょう!
Hash とは
Hashとは、さまざまな配列操作ができるクラスです。
たとえば、配列の中から指定したキーの値のみ取得したり、配列に値を追加、指定した要素の削除、連想配列の作成などをHashクラスを使用して簡単に行うことができます。
Hashクラスは、どのモデルやコントローラーからも呼び出すことができます。
Hashクラスのメソッドは以下の式を使用して、要素の式として使用したり属性で絞り込んだりすることができます。
公式サイトによると、式は以下の4種類になります。
・式の種類

出典:CakePHP 3.4
この式はHashクラスの全てのメソッドで使用することができます。
・属性の絞り込み種別

指定したデータを取得する
extractメソッドの使い方
extractメソッドは配列の中から、指定したパスに沿ったデータを取得することができるメソッドです。
Hash::extract(配列|ArrayAccess $データ, $パス)
以下にextractメソッドを使用して、多次元配列のキーに紐づく値を取得する方法を記述します。
//多次元配列を作成
$fruits = [
['id' => 1, 'name' => 'apple'],
['id' => 2, 'name' => 'orange'],
['id' => 3, 'name' => 'melon'],
['id' => 4, 'name' => 'banana'],
['id' => 5, 'name' => 'pineapple'],
];
//キーがidの値を取得する
$fruits_id = Hash::extract($fruits, '{n}.id');
pr($fruits_id);
//キーがnameの値を取得する
$fruits_name = Hash::extract($fruits, '{n}.name');
pr($fruits_name);
実行結果
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => apple
[1] => orange
[2] => melon
[3] => banana
[4] => pineapple
)
このようにextractメソッドを使用すれば、foreachなどのループ文を使用しなくても、指定したキーの値が簡単に取得できますね!
また、式の条件次第でもっと細かくデータを取り出すことも可能です。
配列の中に配列を挿入する
insertメソッドの使い方
配列の中に配列を挿入するにはinsertメソッドを使用します。
Hash::insert(array $データ, $パス, $値 = null)
$値は$パスの定義に従って配列の中に挿入します。
以下にinsertメソッドを使用して、配列の中に配列を挿入する方法を記述します。
$fruits1 = [ 'id1' => ['name' => 'apple'] ]; $fruits2 = Hash::insert($fruits1, 'id2', ['name' => 'orange']); pr($fruits2);
実行結果
Array
(
[id1] => Array
(
[name] => apple
)
[id2] => Array
(
[name] => orange
)
)
このようにinsert文を使用すれば、配列の中に配列を簡単に挿入できますね!
配列を削除する
removeメソッドの使い方
指定した要素を配列から削除するにはremoveメソッドを使用します。
remove(array $データ, $パス)
removeメソッドは、第二引数の$パスに一致した要素を配列から削除します。
以下にremoveメソッドを使用して、指定したデータの配列を削除するサンプルを記述します。
//配列を作成 $fruits1 = [ 'id1' => ['name' => 'apple'], 'id2' => ['name' => 'orange'], 'id3' => ['name' => 'melon'], ]; //指定したデータを削除 $fruits2 = Hash::remove($fruits1, 'id2'); pr($fruits2);
実行結果
Array
(
[id1] => Array
(
[name] => apple
)
[id3] => Array
(
[name] => melon
)
)
このようにremoveメソッドを使用すれば、指定した配列が簡単に削除できますね!
配列同士を比較する
containsメソッドの使い方
もう1つの配列の中に同じキーと値が存在するか、比較するにはcontainsメソッドを使用します。
containsメソッドは同じキーと値が存在した場合はTRUEを返します。
Hash::contains(array $配列1, array $配列2)
以下にcontainsメソッドを使用して、配列同士を比較して同じキーと値が存在するか、確認する方法を記述します。
$fruits1 = [
'id1' => ['name' => 'apple'],
'id2' => ['name' => 'orange'],
'id3' => ['name' => 'melon'],
];
$fruits2 = [
'id1' => ['name' => 'apple'],
'id2' => ['name' => 'orange'],
'id3' => ['name' => 'melon'],
'id3' => ['name' => 'banana'],
];
$fruits3 = [
'id1' => ['name' => 'apple'],
'id2' => ['name' => 'orange'],
'id3' => ['name' => 'melon'],
];
//配列同士を比較
if (Hash::contains($fruits1, $fruits3)){
echo '一致<br>';
}else{
echo '一致しない<br>';
}
if (Hash::contains($fruits1, $fruits2)){
echo '一致<br>';
}else{
echo '一致しない<br>';
}
実行結果
一致 一致しない
このようにcontainsメソッドを使用すれば、簡単に配列の比較を行うことができます。
まとめ
ここではHashクラスの内容やHashクラスでよく使用するメソッドを紹介しました。
Hashクラスをうまく使いこなせば、複雑な配列の操作も簡単に行うことができますのでこの機会にぜひ覚えておきましょう!
もしHashクラスの使い方を忘れてしまったら、この記事を思い出してくださいね!






