如何反转键=>;嵌套数组PHP的值顺序


How to reverse key=>value order of a nested array PHP?

所以数组看起来像这样:

$folderIDs = array(
	"FolderID"=>0,
	"FolderName"=>"Main Folder",
	"Folders"=>array(
		array(
			"FolderID"=>23,
			"FolderName"=>"First SubFolder",
			"Folders"=>array()
		),
		array(
			"FolderID"=>4,
			"FolderName"=>"Second SubFolder",
			"Folders"=>array(
				array(
					"FolderID"=>99,
					"FolderName"=>"SecondSub SubFolder ",
					"Folders"=>array(
						array(
							"FolderID"=>27,
							"FolderName"=>"SecondSubSub SubFolder",
							"Folders"=>array()
						)
					)
				)
			)
		),
		array(
			"FolderID"=>46,
			"FolderName"=>"Third SubFolder",
			"Folders"=>array()
		)
	)
);

数组可以"更多"嵌套,因为subsubsub文件夹也可以有子文件夹等等

我们想要的是一个看起来像这样的重建阵列:

$reconstructed_folderIDs = array(
	0 => array(
		"FolderName" => "Main Folder",
		"ParentFolder" => "",
	),
	23 => array(
		"FolderName" => "First SubFolder",
		"ParentFolder" => 0,
	),
	4 => array(
		"FolderName" => "Second SubFolder",
		"ParentFolder" => 0,
	),
	99 => array(
		"FolderName" => "SecondSub SubFolder",
		"ParentFolder" => 4,
	),
	127 => array(
		"FolderName" => "SecondSubSub SubFolder",
		"ParentFolder" => 99,
	),
	46 => array(
		"FolderName" => "Third SubFolder",
		"ParentFolder" => 0,
	),
);

有没有快速或可能的解决方案?

提前感谢!

下面是一种获得所需结果的非常糟糕的方法,快速但肮脏。

function process(&$result, $record, $parent = NULL) {
  $f_id = $record['FolderID'];
  $f_name = $record['FolderName'];
  $f_data = $record['Folders'];
  if (!isset($result[$f_id])) 
      $result[$f_id] = [];  
  $result[$f_id]['FolderName'] = $f_name;
  $result[$f_id]['ParentFolder'] = $parent;
  if (empty($f_data)===FALSE)
      foreach( $f_data as $useless => $folder_record )      
          process($result, $folder_record, $f_id);      
}
$reconstructed_folderIDs = [];
process($reconstructed_folderIDs, $folderIDs );