2013-03-04 244 views
0

我有此數組:轉換二維數組多維數組

$data=array(
    array('id'=>12,'name'=>'box1','color'=>'red','content_id'=>18,'content'=>'roses'), 
    array('id'=>12,'name'=>'box1','color'=>'red','content_id'=>22,'content'=>'daisies'), 
    array('id'=>38,'name'=>'box2','color'=>'green','content_id'=>22,'content'=>'daisies'), 

); 

而且我想用這種結構將它轉換:

$structure = array('id'=> 
    array('name','color','content_id'=>array(
     'content'))); 

所以就變成:

array(
    '12'=>array('name'=>'box1','color'=>'red','content_id'=>array(
    '18'=>'roses', 
    '22'=>'daisies')), 
    '38'=>array('name'=>'box2','color'=>'green','content_id'=>array(
    '22'=>'daisies')) 
); 

我創建了一個適用於單個$ data數組(即x_array($ data [0],$ structure))的函數:

function x_array($data,$struc,$first=true) 
    { 
     foreach ($struc as $struc_field=>$inner_struc) 
     { 
      if (!is_array($inner_struc)) 
       {$result[$inner_struc]=$data[$inner_struc];} 
      else { 
       $res=x_array($data,$inner_struc,false); 

       //ignore the first field name and use it's value as key instead 
       if ($first) {$result[$data[$struc_field]]=$res;} 
       else {$result[$struc_field][$data[$struc_field]]=$res;} 

       } 

     } 
     return $result; 

    } 

在檢查:http://phpfiddle.org/main/code/y3e-wxh

但是我卡在下一步該怎麼做,當談到沒有複製或覆蓋一個以上信息陣列的信息集成。請注意,我發佈了一個簡化的數據和結構數組,最終的功能應該能夠管理任何深層結構和任何數量/名稱的字段。 任何幫助,將不勝感激。

回答

0

試試這個:

$data=array(
    array('id'=>12,'name'=>'box1','color'=>'red','content_id'=>18,'content'=>'roses'), 
    array('id'=>12,'name'=>'box1','color'=>'red','content_id'=>22,'content'=>'daisies'), 
    array('id'=>38,'name'=>'box2','color'=>'green','content_id'=>22,'content'=>'daisies'), 

); 

$res = array(); 
foreach($data as $key=>$val){ 
    $res[$val['id']]['name']   = $val['name']; 
    $res[$val['id']]['color']   = $val['color']; 
    $res[$val['id']]['content_id'][$val['content_id']] = $val['content']; 
} 

echo "<pre>"; 
print_r($res); 

輸出:

Array 
(
    [12] => Array 
     (
      [name] => box1 
      [color] => red 
      [content_id] => Array 
       (
        [18] => roses 
        [22] => daisies 
       ) 

     ) 

    [38] => Array 
     (
      [name] => box2 
      [color] => green 
      [content_id] => Array 
       (
        [22] => daisies 
       ) 

     ) 

) 
+0

編輯代碼,請現在 – 2013-03-04 12:09:42

+0

謝謝你檢查一下。是的,這可能會起作用,但是,正如我所說的,我試圖做一個通用的功能,而不是一個特定的陣列結構 – Borgtex 2013-03-04 12:24:41

+0

@Borgtex:好的很酷:D – 2013-03-04 12:27:03