2015-12-21 120 views
1

我有一個包含像遞歸創建從串爆炸多維數組

Cars > Model1 
Cars > Model1 > Accessories 
Cars > Model1 > Something 
Cars > Model2 
Cars > Model3 

,我要遞歸變換成多維陣列,其中「汽車」是型號1,模型2和的父元素很多類別字符串的數組Model3。

當然,「Accessories」和「Something」將是Model1的子元素。

一直努力到現在的工作了這背後的邏輯很長一段時間,我只是似乎無法推測出來......

編輯:我有什麼,到目前爲止,它的並不多。如上所述,似乎無法弄清楚如何開發這個背後的邏輯。

$array = array(
     'Cars > Model1', 
     'Cars > Model1 > Accessories', 
     'Cars > Model1 > Something', 
     'Cars > Model2', 
     'Cars > Model3' 
    ); 

    for ($i = 0; $i < count($array); $i++) { 
     $name = explode('>', $array[$i]); 

     // somehow check if the current "name" is already pushed to a new array - if it is, then add as a child. 
    } 
+1

發表您的PHP代碼 –

+0

我已經嘗試了爆炸「>」和循環通過爆炸字符串將其推入$ newArray。但在每次迭代中,我需要檢查這個特定的名稱是否已經存在於$ newArray中 - 因爲那樣我們就不會添加它。 – dtn

+0

[包含作爲多維數組的字符串的路徑的變量的可能重複?](http://stackoverflow.com/questions/3857033/variable-containing-a-path-as-a-string-to-multi-維數組) –

回答

0

這裏是你如何能做到這一點

$array_data = array(
    'Cars > Model1', 
    'Cars > Model1 > Accessories', 
    'Cars > Model1 > Something', 
    'Cars > Model2', 
    'Cars > Model3' 
); 

$last_key = null; 
$array = []; 
$result = []; 
foreach($array_data as $key => $values) 
{ 
    $data = explode('>', $values); 
    if(is_array($data)) 
    { 
    $count = 0; 
    $pop = array_pop($data); 
    foreach($data as $k => $v) 
    { 
     if($count == 1) 
     { 
      unset($result[$last_key]); 
      $result[$last_key][$v] = $pop; 
      $count++; 
      continue; 
     } 
     $last_key = $v; 
     $result[$v] = $pop; 
     $count++; 
    } 
    $array[] = $result; 
    } 
} 

,結果會像

echo '<pre>';print_r($array); 
Array 
(
    [0] => Array 
    (
     [Cars ] => Model1 
    ) 

[1] => Array 
    (
     [Cars ] => Array 
      (
       [ Model1 ] => Accessories 
      ) 
    ) 

[2] => Array 
    (
     [Cars ] => Array 
      (
       [ Model1 ] => Something 
      ) 

    ) 

[3] => Array 
    (
     [Cars ] => Model2 
    ) 

[4] => Array 
    (
     [Cars ] => Model3 
    ) 

)