CakePHPには配列を扱うメソッドであるSetが用意されています。
ネスト構造の配列を簡略化して扱うことができるので、覚えておくと役に立ちます。foreachで回して新しい変数に入れ直して・・・という処理を行わなくてよくなったりします。
CakeBookでSetについて見てみましょう。
Set
このクラスは配列の管理をし、正しく使えば、よりスマートで、最適化されたコードを作るのにとても強力で便利なツールとなります。 CakePHPは、上記を可能にする非常に便利な静的ユーティリティ郡をSetクラスで提供します。CakePHPのSetクラスはどのモデルやコントローラからも、Inflectorを呼ぶのと同じ方法で呼び出すことができます。 例: Set::combine()
今回はSetの中でも配列の一部を取り出す Set::extract()メソッドを使ってみます。
Set::extract()メソッドの使い方
書式はシンプルで引数は2つです。
Set::extract()は第一引数に「配列のパス」、第二引数に「配列」を指定します。
Set::extract()の具体的な使い方
例1
$users = array( array( 'User' => array( 'id' => 1, 'name' =>'太郎' ), ), array( 'User' => array( 'id' => 2, 'name' =>'花子' ), ), array( 'User' => array( 'id' => 3, 'name' =>'次郎' ), ), );
$arr = Set::extract('/User/id', $users);
Array ( [0] => 1 [1] => 2 [2] => 3 )
例2
$data = array( 'Post' => array( 'id' => 1, ), 'User' => array( 'id' => 3, ), 'Tag' => array( 'id' => 5, ), );
$arr= Set::extract('{.+?}.id', $data);
Array ( [Post] => 1 [User] => 3 [Tag] => 5 )
implode関数と一緒に使う
PHPのメソッドimplode()は配列の要素を文字列によって連結します。この関数と組み合わせるとSet::extract()で取得した配列を文字列(カンマ区切り)などに変換することができます。
$str=implode(', ', Set::extract('/User/name', $data)));
Setメソッド一覧
CakePHPで配列を処理するとき、Setメソッドを探してみると、PHPで行っていた処理が簡単になるかもしれません。
[table id=40 /]
※その他、配列を扱うには下記のメソッドが用意されています。
Hash::get(array $data, string $path)
Hash::extract(array $data, string $path)
Hash::combine(array $data, string $path, string $path)