スライドショー

【CakePHP入門】Hashクラスの使い方をわかりやすく解説!

こんにちは!フリーエンジニアのヤマシタです。

CakePHPでは複雑な配列の処理を簡単に操作できる、Hashクラスがあります。

この記事では、

・Hashクラスとは?
・指定したデータを取得する方法
・配列の中に配列を挿入する方法
・配列を削除する方法
・配列同士を比較する方法

などのHashクラスの概要やHashクラスでよく使われるメソッドなどを解説していきます!

Hashクラスはよく使用する配列操作をより簡単に行うことができますので、この機会にぜひ覚えておきましょう!

Hash とは

Hashとは、さまざまな配列操作ができるクラスです。

たとえば、配列の中から指定したキーの値のみ取得したり、配列に値を追加、指定した要素の削除、連想配列の作成などをHashクラスを使用して簡単に行うことができます。

Hashクラスは、どのモデルやコントローラーからも呼び出すことができます。

Hashクラスのメソッドは以下の式を使用して、要素の式として使用したり属性で絞り込んだりすることができます。

公式サイトによると、式は以下の4種類になります。

・式の種類
image1
出典:CakePHP 3.4

この式はHashクラスの全てのメソッドで使用することができます。


・属性の絞り込み種別

image2

指定したデータを取得する

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クラスの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説