在php中将单个数组转换为多维数组

dev*_*212 5 php arrays multidimensional-array

如果一个问题我现在尝试解决几个小时,但根本无法找到解决方案.

如果是单个路径数组

$singleArray = array(
   '/Web',
   '/Web/Test1',
   '/Web/Test2', 
   '/Web/Test2/Subfolder',
   '/Web/Test3',
   '/Public'
);
Run Code Online (Sandbox Code Playgroud)

从该数组我想创建一个多维数组,它保留键,但将子文件夹放在正确的父文件夹中.后来我想循环遍历新数组以创建文件夹树(但这不是问题)

新数组应如下所示:

$multiArray = array(
   '/Web'=>array(
      '/Web/Test1'=>array(),
      '/Web/Test2'=>array(
          '/Web/Test2/Subfolder'=>array()
      ),
      '/Web/Test3'=>array()
   ),
   '/Public'=>array()
);
Run Code Online (Sandbox Code Playgroud)

小智 5

下面的代码将生成您想要的数组.解决问题的关键是每次迭代都要创建对数组的引用.

<?php
$singleArray = array(
    '/Web',
    '/Web/Test1',
    '/Web/Test2',
    '/Web/Test2/Subfolder',
    '/Web/Test3',
    '/Public'
);

$multiArray = array();

foreach ($singleArray as $path) {
    $parts       = explode('/', trim($path, '/'));
    $section     = &$multiArray;
    $sectionName = '';

    foreach ($parts as $part) {
        $sectionName .= '/' . $part;

        if (array_key_exists($sectionName, $section) === false) {
            $section[$sectionName] = array();
        }

        $section = &$section[$sectionName];
    }
}
Run Code Online (Sandbox Code Playgroud)