【问题标题】:How to construct all possible paths from an array?如何从数组构造所有可能的路径?
【发布时间】:2016-05-03 17:38:21
【问题描述】:

我有这个数组:

Array
(
    [images] => Array
        (
            [0] => g
            [1] => hp
        )

    [g] => Array
        (
            [0] => menu
            [1] => submenu
            [2] => icons
        )

    [hp] => Array
        (
            [0] => cat
            [1] => icons
            [2] => banners
        )

    [menu] => Array
        (
            [0] => v1
        )

    [submenu] => Array
        (
            [0] => img
            [1] => icons
        )

    [icons] => Array
        (
            [0] => v1
        )

    [cat] => Array
        (
            [0] => kt
            [1] => hk
            [2] => bm
            [3] => w
            [4] => m
            [5] => at
            [6] => e
        )

    [banners] => Array
        (
            [0] => v1
        )

    [img] => Array
        (
            [0] => e
        )

    [kt] => Array
        (
            [0] => v1
        )

    [hk] => Array
        (
            [0] => v1
        )

    [bm] => Array
        (
            [0] => v1
        )

    [w] => Array
        (
            [0] => v1
        )

    [m] => Array
        (
            [0] => v1
        )

    [at] => Array
        (
            [0] => v1
        )

    [e] => Array
        (
            [0] => v1
        )

)

这里images 是主文件夹。我想构造这个数组的所有可能路径,以images 开头作为第一个子数组,如果任何值作为数组本身的元素存在,它也是一个子文件夹,我想通过并做同样的事情,直到我构造所有可能的路径。

所以一些可能的路径是:

images/g/menu/v1
images/g/submenu/img/e/v1

看看g如何是images中的一个值,但也存在于数组本身中。所以我通过g 并且有menu,它再次存在于数组中。同样再次遍历menu 的每个值,这将是v1,这在数组中不存在。所以构造的路径是:images/g/menu/v1

【问题讨论】:

  • 所以你只想要这个数组中的images/g/menu/v1, images/g/submenu/img/e/v1?例如,hp subArray 是什么?!
  • 你要制作动态文件夹链接吗???
  • 和这个一样 hp 是另一个子文件夹
  • 那么什么是子文件夹?他们有什么命令吗?您的全部预期输出到底是什么?所有可能的可构造路径?
  • 我期待像 images/g/menu/v1 images/g/submenu/img/e/v1 images/hp/cat/kt/v1 images/hp/icons/v1 这样的输出。 ..

标签: php arrays combinations


【解决方案1】:

可能有更好的方法,但这应该可以解决问题:

$myArray = [
'images' => ['g','hp'],
'g' => ['menu','submenu','icons'],
'hp' => ['cat', 'icons', 'banners'],
'menu' => ['v1',],
'submenu' => ['img','icons'],
'icons' => ['v1'],
'cat' => ['kt','hk','bm','w','m','at','e'],
'banners' => ['v1'],
'img' => ['e'],
'kt' => ['v1',],
'hk' => ['v1',],
'bm' => ['v1',],
'w' => ['v1',],
'm' => ['v1',],
'at' => ['v1',],
'e' => ['v1',],
];


function getPath($array, $key, $path, &$returnArray) {
    if(isset($array[$key]))
    {
        foreach($array[$key] as $v) {
            $newPath = $path.$v.'/';

            $nextPath = getPath($array, $v, $newPath, $returnArray);
            if(!empty($nextPath))
            {
                $returnArray[] = $nextPath;
            }
        }
    } else {
        return $path;
    }
}

$allPaths = array();

getPath($myArray, 'images', '', $allPaths);

echo "<pre>";print_r($allPaths);echo "</pre>";

输出:

Array
(
    [0] => g/menu/v1/
    [1] => g/submenu/img/e/v1/
    [2] => g/submenu/icons/v1/
    [3] => g/icons/v1/
    [4] => hp/cat/kt/v1/
    [5] => hp/cat/hk/v1/
    [6] => hp/cat/bm/v1/
    [7] => hp/cat/w/v1/
    [8] => hp/cat/m/v1/
    [9] => hp/cat/at/v1/
    [10] => hp/cat/e/v1/
    [11] => hp/icons/v1/
    [12] => hp/banners/v1/
)

【讨论】:

  • 非常感谢ji,对我很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多