[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

配列
$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)



Author: webmaster