2011-01-08 10 views
2

を行うための簡単な方法は、私はPHPで、この配列はPHP配列。この

 
Array 
(
    [inv_templates] => Array 
     (
      [0] => Array 
       (
        [inven_subgroup_template_id] => 1 
        [inven_group] => Wires 
        [inven_subgroup] => CopperWires 
        [inven_template_id] => 1 
        [inven_template_name] => CopperWires6G 
        [constrained] => 0 
        [value_constraints] => 
        [accept_range] => 2 - 16 
        [information] => Measured Manual 
       ) 

      [1] => Array 
       (
        [inven_subgroup_template_id] => 1 
        [inven_group] => Wires 
        [inven_subgroup] => CopperWires 
        [inven_template_id] => 2 
        [inven_template_name] => CopperWires2G 
        [constrained] => 0 
        [value_constraints] => 
        [accept_range] => 1 - 7 
        [information] => Measured by Automated Calipers 
       ) 

     ) 

) 

DBからそこ戻ってきたしなければならない私は、出力に多次元もののこの種を必要とする

 
Array 
(
    [Wires] => Array 
     (
      [inv_group_name] => Wires 
      [inv_subgroups] => Array 
       (
        [CopperWires] => Array 
         (
          [inv_subgroup_id] => 1 
          [inv_subgroup_name] => CopperWires 
          [inv_templates] => Array 
           (
            [CopperWires6G] => Array 
             (
              [inv_name] => CopperWires6G 
              [inv_id] => 1 
             ) 

            [CopperWires2G] => Array 
             (
              [inv_name] => CopperWires2G 
              [inv_id] => 2 
             ) 

           ) 

         ) 

       ) 

     ) 

) 


私は現在、このようなもの

を行います
 
foreach ($data['inv_templates'] as $key => $value) { 
     $processeddata[$value['inven_group']]['inv_group_name'] = $value['inven_group']; 
     $processeddata[$value['inven_group']]['inv_subgroups'][$value['inven_subgroup']]['inv_subgroup_id'] = $value['inven_subgroup_template_id']; 
     $processeddata[$value['inven_group']]['inv_subgroups'][$value['inven_subgroup']]['inv_subgroup_name'] = $value['inven_subgroup']; 
     $processeddata[$value['inven_group']]['inv_subgroups'][$value['inven_subgroup']]['inv_templates'][$value['inven_template_name']]['inv_name'] = $value['inven_template_name']; 
     $processeddata[$value['inven_group']]['inv_subgroups'][$value['inven_subgroup']]['inv_templates'][$value['inven_template_name']]['inv_id'] = $value['inven_template_id']; 

    } 
    return $processeddata; 


EDIT:でvar_export

array (
    'inv_templates' => 
    array (
    0 => 
    array (
     'inven_subgroup_template_id' => '1', 
     'inven_group' => 'Wires', 
     'inven_subgroup' => 'CopperWires', 
     'inven_template_id' => '1', 
     'inven_template_name' => 'CopperWires6G', 
     'constrained' => '0', 
     'value_constraints' => '', 
     'accept_range' => '2 - 16', 
     'information' => 'Measured Manual', 
    ), 
    1 => 
    array (
     'inven_subgroup_template_id' => '1', 
     'inven_group' => 'Wires', 
     'inven_subgroup' => 'CopperWires', 
     'inven_template_id' => '2', 
     'inven_template_name' => 'CopperWires6G', 
     'constrained' => '0', 
     'value_constraints' => '', 
     'accept_range' => '1 - 7', 
     'information' => 'Measured by Automated Calipers', 
    ), 
), 
)

foreachはほとんど読めません。簡単な方法が必要です

+0

皆さんが – goat

+0

をテストすることができますので、それは必ずしも連想出力、ワイヤー、Copperwiresである必要はないでvar_export()サンプルアレイを提供...数値に置き換えることができる(実際には私がいることを好む) –

+0

@ chris- done that –

答えて

1
$processeddata = array(); 

foreach($data['inv_templates'] as $key => $value) { 
    $group = $value['inven_group']; 
    $processeddata[$group]['inv_group_name'] = $group; 

    $subgroup = &$processeddata[$group]['inv_subgroups'][$value['inven_subgroup']]; 
    $subgroup['inv_subgroup_id'] = $value['inven_subgroup_template_id']; 
    $subgroup['inv_subgroup_name'] = $value['inven_subgroup']; 

    $template = $value['inven_template_name']; 
    $subgroup['inv_templates'][$template]['inv_name'] = $template; 
    $subgroup['inv_templates'][$template]['inv_id'] = $value['inven_template_id']; 
} 

return $processeddata; 
+0

ニース。今私は実際にそれを理解することができます。 –

0

未知のコードです。これにより、配列が多次元的に構造化され、array_merge_recursiveを使用して、すでに処理されたデータとマージされます。

if (!isset($processeddata[$value['inven_group']])) 
    $processeddata[$value['inven_group']] = array(); 

$processeddata[$value['inven_group']] = array_merge_recursive(
    $processeddata[$value['inven_group']], 
    array(
     'inv_group_name' => $value['inven_group'], 
     'inv_subgroups' => array(
      $value['inven_subgroup'] => array(
       'inv_subgroup_id' => $value['inven_subgroup_template_id'], 
       'inv_subgroup_name' => $value['inven_subgroup'], 
       'inv_templates' => array(
        $value['inven_template_name'] => array(
         'inv_name' => $value['inven_template_name'], 
         'inv_id' => $value['inven_template_id'], 
        ), 
       ), 
      ), 
     ), 
    ) 
); 
0

私はこのフォーマットは通常、私の作品を見つけます。あなたはそれをより効率的にすることができました。私は気にしませんでした。D

$ yourArray ['inv_templates']でトラバースを開始しました。

function groupToStructure(array $rows, array $keys) { 
    $tree = array(); 
    $keys = array_reverse($keys); 
    foreach ($rows as $row) { 
     $subTree = array($row); 
     foreach ($keys as $key) { 
      $subTree = array($row[$key] => $subTree); 
     } 
     $tree = array_merge_recursive($tree, $subTree); 
    } 
    return $tree; 
} 

print_r(groupToStructure($rows, array('inven_group', 'inven_subgroup', 'inven_template_name')));