これを自分で解決しようとしていますが、理解できる解決策が見つかりません。
この配列は、アプリケーションが動的構成ファイルを読み取ってロードするときにその場で作成されます。
私の問題は、alias
取得される配列を呼び出して、その下にある親配列の名前を変更したいということ['@attr']
です。これが私が何を意味するかを示す例です。
[database] => Array
(
[0] => Array // Would be renamed to "production"
(
[host] => test
[user] => test
[pass] => test
[name] => test
[port] => test
[@attr] => Array
(
[alias] => production
[name] => live
)
)
[1] => Array // Would be renamed to "development"
(
[user_data] => Array
(
[0] => Array // Would be renamed to "three"
(
[user] => sample
[@attr] => Array
(
[alias] => three
)
)
[1] => Array // Would be renamed to "two"
(
[user] => sample
[@attr] => Array
(
[alias] => two
)
)
)
[host] => test
[user] => test
[pass] => test
[name] => test
[port] => test
[@attr] => Array
(
[alias] => development
)
)
)
これはこれまでの私のコードです
private function _applyXmlAlias($array)
{
foreach ($array as $config)
{
if (is_array($config))
{
if (isset($config['@attr']['alias']))
{
$alias = $config['@attr']['alias'];
unset($config['@attr']['alias']);
if (empty($config['@attr']))
{
unset($config['@attr']);
}
$this->_alias[$alias] = $config;
break;
//$this->_temp = reset();
} else {
$this->_applyXmlAlias($config);
}
}
}
}
_alias
プロパティの print_r を実行すると、これが得られます
Array
(
[production] => Array
(
[host] => test
[user] => test
[pass] => test
[name] => test
[port] => 3306
[@attr] => Array
(
[name] => live
)
)
[development] => Array
(
[user_data] => Array
(
[0] => Array
(
[user] => sample
[@attr] => Array
(
[alias] => three
)
)
[1] => Array
(
[user] => sample
[@attr] => Array
(
[alias] => two
)
)
)
[host] => test
[user] => test
[pass] => test
[name] => test
[port] => 3306
)
)
注: 私のループalias
が、値を持つ他のキーではなく、production
キーを持つ最後のネストされた配列のみをキャプチャする理由がわかりません。development
これにどのようにアプローチできるかについてのアイデアはありますか? 正しい道に少しガイドが必要なだけで、私は近づいていると感じています。
ありがとう
編集:現在の試行を反映するように関数を更新しました