【问题标题】:How to reverse key=>value order of a nested array PHP?如何反转嵌套数组PHP的键=>值顺序?
【发布时间】:2015-04-05 17:27:35
【问题描述】:

所以数组看起来像这样:

$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,
	),
);

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

提前致谢!

【问题讨论】:

    标签: php arrays nested flip


    【解决方案1】:

    下面是获得所需结果的一种相当讨厌的方法,快速但肮脏。

    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 );
    

    【讨论】:

    • 谢谢!而且我不认为它很脏,也没有更好的解决方案(我猜?)——对我来说,它是完美的。 :) 如果子文件夹数组不为空,我看到“解决方案”实际上是在函数本身内运行相同的函数。非常感谢,马金! :)
    • 是的。这称为“递归函数”。最良好的祝愿。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2023-03-29
    • 2020-11-01
    • 1970-01-01
    • 2020-03-03
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多