[PHP-users 34245] 再帰処理について

decoy youtube0318 @ gmail.com
2009年 1月 18日 (日) 10:54:39 JST


decoyです。

配列の全ての値と、値の手前にその値が持つキー(ハッシュ)を、区切り文字を使用して配列で返す
といった処理を行いたいのですが、何か良い方法は御座いませんでしょうか。

例:下記のような配列があり、区切り文字を/としたい場合

$hogehoge = array(
    'hogeKey1' => array(
        'hogeValue1',
        'hogeValue2',
        'hogeValue3',
        'hogeKey2' => array(
            'hogeValue21',
            'hogeValue22',
        ),
    ),
);

出力イメージ
array(5) {
  [0]=>
  string(19) "hogeKey1/hogeValue1"
  [1]=>
  string(19) "hogeKey1/hogeValue2"
  [2]=>
  string(19) "hogeKey1/hogeValue3"
  [3]=>
  string(29) "hogeKey1/hogeKey2/hogeValue21"
  [4]=>
  string(29) "hogeKey1/hogeKey2/hogeValue22"
}
↑全ての値(hogeValue系)を表示し、その値(hogeValue系)の手前に
区切り文字( / )を使用してキー(ハッシュのみ)を表示しています。


※
グローバル変数を利用した上記処理は出来たのですが
何とかグローバル変数を利用せずに関数内で完結するよう処理したいところです。

function hoge($arg1, $aryKey = array())
{

    foreach ($arg1 as $intKey => $mixValue) {
        if (is_array($mixValue)) {
            $aryKey[] = $intKey;
            return call_user_func(__FUNCTION__, $mixValue, $aryKey);
        }
        $GLOBALS['hoge'][] = join('/', $aryKey) . '/' . $mixValue;
    }
    return $GLOBALS['hoge'];
}

var_dump(hoge($hogehoge));

↑これをグローバル変数を利用せずに行いところです。


※上記、説明でわかりにくい点が御座いましたら仰って下さい。


以上、お手数ですがご教授の程、宜しくお願い致します。

// decoy



PHP-users メーリングリストの案内