情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

CakePHP Hash::extractについて

cakephpのコードでHash::extractという記述を見つけまして、以前もどこかで見たような気がするのですが しっかり理解できていなかったので使い方等記載していきます。

まず説明の前に以下のようなデータを持っているとします。

$results = array(
    0 => array(
        'book' => array(
            'title' => 'ワンピース',
            'auther' => '尾田栄一郎',
            'category' => array(
                'id' => 3,
                'name' => '漫画'
            )
        )
    ),
    1 => array(
    'book' => array(
        'title' => 'ゴールデンスランバー',
        'auther' => '伊坂幸太郎',
        'category' => array(
                'id' => 2,
                'name' => '小説'
            )
        )
    )
);

CakePHPでのデータはもっと複雑になっていくと思うのですが、複雑になった配列から特定の要素だけを取り出して 新たな配列にするのがHash::extractになります。

では実際の使い方になります。 例えば本のタイトルのみを配列にまとめたい場合は以下のように記述します。

$temp = Hash::extract($results , "{n}.book.title");

debug($temp);


Array
(
    [0] => ワンピース
    [1] => ゴールデンスランバー
)

カテゴリーのidのみを配列にしたい場合は以下になります。

$temp = Hash::extract($results , "{n}.book.category.id");

debug($temp);


Array
(
    [0] => 3
    [1] => 2
)

第二引数で取得したい要素を指定するのですが{n}というものが出てきました こちらは数値キーを意味します。どんな文字列キーでも 数値型のキーでも取得します。

使い方は色々とあるかと思います。

以下のサイトを参考にしました。

CakePHPのarray地獄をHashクラスで生きのこる - ハウテレビジョン開発者ブログ