[CakePHP] ネスト構造の配列を簡単に扱う方法 Set::extract()

CakePHPには配列を扱うメソッドであるSetが用意されています。

ネスト構造の配列を簡略化して扱うことができるので、覚えておくと役に立ちます。foreachで回して新しい変数に入れ直して・・・という処理を行わなくてよくなったりします。

CakeBookでSetについて見てみましょう。

Set
このクラスは配列の管理をし、正しく使えば、よりスマートで、最適化されたコードを作るのにとても強力で便利なツールとなります。 CakePHPは、上記を可能にする非常に便利な静的ユーティリティ郡をSetクラスで提供します。

CakePHPのSetクラスはどのモデルやコントローラからも、Inflectorを呼ぶのと同じ方法で呼び出すことができます。 例: Set::combine()

CookBook 2.x Set

今回はSetの中でも配列の一部を取り出す Set::extract()メソッドを使ってみます。

Set::extract()メソッドの使い方

書式はシンプルで引数は2つです。

書式
Set::extract(‘配列のパス’, $array);

Set::extract()は第一引数に「配列のパス」、第二引数に「配列」を指定します。

Set::extract()の具体的な使い方

例1

配列

メソッドの実行

結果

例2

配列

メソッドの実行

結果

implode関数と一緒に使う

PHPのメソッドimplode()は配列の要素を文字列によって連結します。この関数と組み合わせるとSet::extract()で取得した配列を文字列(カンマ区切り)などに変換することができます。

Setメソッド一覧

CakePHPで配列を処理するとき、Setメソッドを探してみると、PHPで行っていた処理が簡単になるかもしれません。

メソッド意味戻り値の型
Set::apply($path, $array, $callback, $options = array())Set::extract互換のパスで展開された配列の要素にコールバックを適用mixed
Set::check($data, $path = null)特定のパスが配列にセットされているか調査。$pathがからのときは$dataをそのまま返す。$pathがあるときは真偽値を返す。boolean/array
Set::extract($path, $data = null, $options = array())配列やオブジェクトから、配列のパス記法で与えられたパスに含まれる値を返す。array
Set::combine($data, $path1 = null, $path2 = null, $groupPath = null) $path1 で指定されたパスをキーに、そしてオプションで $path2 で指定されたパスを値に、連想配列を作成array
Set::contains($val1, $val2 = null)一つの配列が、もう片方の配列のキーと値を正確に含んでいるかを確認boolean
Set::countDim($array = null, $all = false, $count = 0)配列の次元の数を返す。integer
Set::diff($val1, $val2 = null)二つの配列の間の差分を計算array
Set::enum($select, $list = null)配列のリストから、キーが存在するものの値を返す。string
Set::filter($var)ルート配列から空の要素を除く。「0」の要素は除かない。array
Set::flatten($data, $separator = '.')多次元配列を1次元配列に変換。array
Set::format($data, $format, $keys)配列から、文字列にフォーマットしたものを抜粋array
Set::insert($list, $path, $data = null)$path で定義された配列の中に $data を挿入array
Set::map($class = 'stdClass', $tmp = 'stdClass')Setオブジェクトのコンテンツを、数値添字をオブジェクトの配列として保ちながら、ひとつのオブジェクトにマッピングobject
Set::matches($conditions, $data = array(), $i = null, $length = null)単一のアイテムあるいは与えられた XPath が、ある条件にマッチするか確認。boolean
Set::merge($arr1, $arr2 = null) PHP の array_merge と array_merge_recursive を混ぜ合わせたものarray
Set::nest($data, $options = array())フラットな配列を引数にとり、ネストされた配列を返す。array
Set::normalize($list, $assoc = true, $sep = ', ', $trim = true)文字列や配列のリストを正規化array
Set::numeric($array=null)配列の全ての値が数字かどうかチェックboolean
Set::pushDiff($array1, $array2)二つの配列を統合し、戻り値の配列の最後に array2 の差分を追加array
Set::remove($list, $path = null)セットや配列の中のから、$pathで定義されたパスの要素を削除array
Set::reverse($object)Set::reverse は基本的に Set::map の逆を行い、オブジェクトを配列に変換。array
Set::sort($data, $path, $dir)パスで確定したあらゆる値で配列をソートarray

※その他、配列を扱うには下記のメソッドが用意されています。

Hash::get(array $data, string $path)
Hash::extract(array $data, string $path)
Hash::combine(array $data, string $path, string $path)



Author: webmaster