Php 如何从一个数组构造所有可能的路径?
我有这个阵列:Php 如何从一个数组构造所有可能的路径?,php,arrays,combinations,Php,Arrays,Combinations,我有这个阵列: Array ( [images] => Array ( [0] => g [1] => hp ) [g] => Array ( [0] => menu [1] => submenu [2] => icons ) [hp] =>
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
Se how
g
是图像中的一个值,但也存在于数组本身中。所以我通过g
,看到了菜单
,它同样存在于数组中。同样地,通过菜单
的每个值,它们将是v1
,而这在数组中不存在。因此,构建的路径应该是:images/g/menu/v1
可能有更好的方法,但这应该可以做到:
$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>";
所以你只想从这个数组中得到images/g/menu/v1,images/g/submenu/img/e/v1
?例如,什么是hp
子阵列?!是否要创建动态文件夹链接???与此相同hp是另一个子文件夹那么所有子文件夹是什么?他们有订单吗?你的全部预期产出是多少?所有可能的可构建路径?我期待像images/g/menu/v1 images/g/submenu/img/e/v1 images/hp/cat/kt/v1 images/hp/icons/v1这样的输出…非常感谢ji,这对我很有帮助
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/
)