多重配列内の特定のキーを検索しその値を取り出す

下のような多重配列があるとする。

<?php
$a = [
    'foo' => [
        'bar' => [
            'user_id' => 10
        ]
    ]
];

この配列構造を知らない状態で、'user_id'キーの値だけ検索して取り出したい。

再帰処理を書けばいいだけなんだけど、PHPの標準ライブラリで実現できないかと思って検索すると、できそうなクラスが見つかった。

PHP: RecursiveIteratorIterator - Manual

再帰的なイテレータの反復処理に使用します。

これでできそう。しかし、RecursiveIteratorIterator… すごいクラス名だ。

サンプルコードを参考にして、以下のようなコードを作成した。 これで、どのような多重配列構造の配列でも特定のキー名から対応する値を取り出せる。

<?php
function searchValueByKey(array $ary, $str) {
    $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($ary));
    foreach ($it as $k => $v) {
        if ($str === $k) { return $v; }
    }
    return false;
}

$a = [
    'foo' => [
        'bar' => [
            'user_id' => 10
        ]
    ]
];

// search 'user_id' value in the array
echo searchValueByKey($a, 'user_id'); // 10

本記事はQiita に投稿しました。

[PHP]多重配列内の特定のキーを検索しその値を取り出す on @Qiita http://qiita.com/tic40/items/2e45e2a9d25b91eed8f1