要素キーとして文字列を使用して、配列の要素を動的に設定/取得したいと思います。
そこで、文字列を複数のキー配列に変換する良い方法を探しています。
私は誇りに思っていない醜いコードで期待される結果に達します。
function arrayElementSet($str, $value, array &$array)
{
$arrayStr = "['".preg_replace('/\./', "']['", $str)."']";
eval('$array'.$arrayStr.'="'.$value.'";');
}
function arrayElementGet($str, array &$array)
{
$arrayStr = "['".preg_replace('/\./', "']['", $str)."']";
eval('$ret=$array'.$arrayStr.';');
return $ret;
}
$array = array();
arrayElementSet('d0.d1.d2.d4', 'bar', $array);
$wantedElement = arrayElementGet('d0.d1.d2', $array);
print_r($array);
/*
wantedElement looks like:
Array
(
[d4] => bar
)
$array looks like:
Array
(
[d0] => Array
(
[d1] => Array
(
[d2] => Array
(
[d4] => bar
)
)
)
)
*/
しかし、それはかなり醜いです。さらに、 eval() 関数を避けたいと思います。
私は特に配列ソリューションに執着しているわけではありません。オブジェクトなどを使用した優れたソリューションがあれば、それを採用します。
編集:
知っておくだけです。Laravel の 2 つのヘルパー関数 (array_get と array_set) がすぐに使用できます。