2016-04-28 161 views
0

我有這樣的陣列字符串轉換爲多維數組

dev3->content->->mktg->->->pls1->->->pls2->->->config->->splash 

我想這個字符串轉換爲多維數組。這樣

Array 
     (
     [0] => dev3 
     Array (
      [0] => ->content 
      Array (
       [0] => ->->mktg 
        Array(
         [0] => ->->->pls1 
         [1] => ->->->pls2 
         [2] => ->->->config 
        ) 
       [1] => ->->splash 
      ) 
     ) 
    ) 

任何人都可以做到這一點

+2

我們可以看到代碼,你一直在努力,得到這個工作? – Henders

+0

當然,我們在這裏幫你.... –

+0

我無法找到任何解決方案,我只是字符串 –

回答

3

上面我們做出這樣的陣列從輸入字符串

它不工作,如果水平將increaed更多的則+1上的任何一步

$str = 'dev3->content->->mktg->->->pls1->->->pls2->->->config->->splash'; 

$in = preg_split('/(?<!>)(?=->)/', $str); 

Array 
(
    [0] => dev3 
    [1] => ->content 
    [2] => ->->mktg 
    [3] => ->->->pls1 
    [4] => ->->->pls2 
    [5] => ->->->config 
    [6] => ->->splash 
) 

繼續工作

$result = []; 
$p = &$result; 
$level = 0; 
foreach($in as $i) { 
    // Count next level 
    $c = substr_count($i, '->'); 
    // if level is not changed 
    if($c == $level) { $p[] = $i; continue; } 
    // level increased 
    if ($c == $level + 1) { 
    $level++; 
    $p[] = [$i]; 
    $p = &$p[count($p)-1]; 
    continue; 
    } 
    // any level less then achived before 
    if ($c < $level) { 
    $p = &$result; 
    $level = $c; 
    while($c--) 
     $p = &$p[count($p)-1]; 
    $p[] = $i; 
    continue; 
    } 
    die("I can't process this input string"); 
} 
print_r($result); 

working demo

+0

這就是我所說....沒有人感謝我的想法。 –

+1

我認爲OP會感謝你:) – splash58

+0

可能是因爲我不寬鬆的希望... –