2013-03-04 4 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')) 
); 

단일 $ 데이터 배열 (즉, x_array ($ data [0], $ structure))에 대해 작동하는 함수를 만들었습니다.

나는 그것이 복제 또는 정보를 덮어 쓰지 않고 하나 개 이상의 배열의 정보를 통합 할 때, 다음에 무엇을해야하는지에 붙어 그러나 http://phpfiddle.org/main/code/y3e-wxh

:

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; 

    } 

는 그것을 확인합니다. 단순화 된 데이터 및 구조 배열을 게시했음을 유의하십시오. 마지막 함수는 모든 구조체를 깊이 있고 숫자/필드 이름을 관리 할 수 ​​있어야합니다. 도움이 될 것입니다.

답변

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

코드가 지금 –

+0

감사를 확인하시기 바랍니다 편집. 예, 아마 작동 할 것이지만, 제가 말했듯이, 배열 구조 고유의 함수가 아닌 보편적 인 함수를하려고 노력하고 있습니다. – Borgtex

+0

@Borgtex : Ok cool : D –