葉への各フルパスが個別の戻り値になるように、複数の葉ノードを持つ配列を平坦化する最良の方法は何ですか?
array("Object"=>array("Properties"=>array(1, 2)));
得た
- オブジェクト.プロパティ.1
- オブジェクト.プロパティ.2
Object.Properties.1 にフラット化できますが、2 は再帰関数で処理されません。
function flattenArray($prefix, $array)
{
$result = array();
foreach ($array as $key => $value)
{
if (is_array($value))
$result = array_merge($result, flattenArray($prefix . $key . '.', $value));
else
$result[$prefix . $key] = $value;
}
return $result;
}
複数のリーフノードが予想される場合、トップダウンは機能しないと思われるため、何らかのタイプのボトムアップ処理またはリーフとプロセスごとに配列をコピーする方法が必要です (ただし、これは完全に非効率的と思われます)。