2013-03-04 243 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