2016-08-04 40 views
1

我有一個數組,看起來像這樣(改變食物的例子 - 它實際上是業務主題標籤的分類):變換平面數組多維與節點值

Array 
(
    [fruit] => Fruit 
    [fruit/apple] => Apple 
    [fruit/banana] => Banana 
    [fruit/passion-fruit] => Passion fruit 
    [vegetable] => Vegetable 
    [vegetable/beans] => Beans 
    [vegetable/beans/runner-beans] => Runner beans   
) 

我想使用遞歸(推測)將其改爲:

Array 
(
    [fruit] => Array 
     (
      [title] => Fruit 
      [children] => Array 
       (
        [apple] => Array 
         (
          [title] => Apple 
         ) 
        [banana] => Array 
         (
          [title] => Banana 
         ) 
        [passion-fruit] => Array 
         (
          [title] => Passion fruit 
         ) 
       ) 
     ) 
    [vegetable] => Array 
     (
      [title] => Vegetable 
      [children] => Array 
       (
        [beans] => Array 
         (
          [title] => Beans 
          [children] => Array 
           (
            [runner-beans] => Array 
             (
              [title] => Runner beans 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

我不知道該怎麼做。我在這裏找到了其他的例子,用於將平展數組轉換爲多維數組,但不包括有值('標題')和自定義子節點的地方。提前感謝任何指針。

回答

0

假設你的數組被命名爲$array

$result = array(); 

foreach($array as $key => $value) { 
    $temp =& $result; 
    $path = explode('/', $key); 

    foreach($path as $subkey) { 
     if(!isset($temp[$subkey])) { 
      $temp[$subkey]['title'] = $value; 
      $temp[$subkey]['children'] = array(); 
     } 
     $temp =& $temp[$subkey]['children']; 
    } 
} 

我張貼此,即使它產生,即使沒有孩子children關鍵。我將重新審視和編輯。

+0

謝謝 - 非常有幫助。當我看到它被寫下來時很簡單 - '通過參考'傳遞現在總是有意義的。如果你能夠刪除空的子節點,甚至更好! – Rob556

+0

出於興趣,如果不是數組鍵是'ID',我們有一個索引數組,如[0] => array('id'=>'orange','title'=>'Orange',children = > ...),這將是多麼簡單的事情?我知道我們在關鍵字名稱上使用了isset(),所以它可能會導致在數組內搜索的複雜性。 – Rob556