2016-05-03 15 views
-1

私はこの配列を持っている:ここでは配列からすべての可能なパスを構築する方法は?

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で始まるこの配列のすべての可能なパスを構築したいのですが、値自体が配列の要素として存在する場合は、それもsubFolderです。すべての可能なパスを構築するまで、 。

ので、いくつかの可能なパスが次のようになります

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

gimagesの値であるが、アレイ自体に存在する方法のSe。だから私はgに行き、menuがあります。これはやはり配列に存在します。同じくmenuの各値は、v1であり、これは配列には存在しません。したがって、構築されたパスはimages/g/menu/v1となります。

+0

だからのみたい '画像/ G /メニュー/ V1、画像/ G /サブメニュー/ img/e/v1'をこの配列から削除しますか?そして、例えば 'hp'サブアレイは何ですか? – Rizier123

+0

動的フォルダリンクを作成しますか? –

+0

同じようなもの hpは別のサブフォルダです –

答えて

0

は、おそらくより良い方法があるが、これはトリックを行う必要があります。

$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/ 
) 
+0

ありがとう、私に役立ちます –

+0

あなたの問題を解決する場合は、この答えをupvote。 –

関連する問題