2009-09-03 43 views
0

我有一个数组,看起来像这样变换数组几个SQL语句

Array 
(
[provider] => Array 
    (
     [id] => provider1 
     [distribuitor] => Array 
      (
       [0] => Array 
        (
         [name] => distribuitor1 
         [machines] => Array 
          (
           [0] => Array 
            (
             [id] => MX3 
             [installDate] => 2009-01-01 
            ) 

           [1] => Array 
            (
             [id] => MX4 
             [installDate] => 2008-01-01 
            ) 

           [2] => Array 
            (
             [id] => MX7 
             [installDate] => 2009-05-05 
            ) 

          ) 

        ) 

       [1] => Array 
        (
         [name] => distribuitor2 
         [machines] => Array 
          (
           [0] => Array 
            (
             [id] => FX3 
             [installDate] => 2009-11-15 
            ) 

           [1] => Array 
            (
             [id] => GX4 
             [installDate] => 2008-07-22 
            ) 

           [2] => Array 
            (
             [id] => RX7 
             [installDate] => 2009-06-25 
            ) 

          ) 

        ) 

      ) 

    ) 

) 

从这个数组我想产生这样的一系列的SQL语句:

INSERT INTO table1 VALUES ('provider1','distrubuitor1','MX3','2009-01-01') 
INSERT INTO table1 VALUES ('provider1','distrubuitor1','MX4','2008-01-01') 
INSERT INTO table1 VALUES ('provider1','distrubuitor1','MX7','2009-05-05') 
INSERT INTO table1 VALUES ('provider1','distrubuitor2','FX3','2009-11-15') 
INSERT INTO table1 VALUES ('provider1','distrubuitor2','GX4','2008-07-22') 
INSERT INTO table1 VALUES ('provider1','distrubuitor2','RX7','2009-06-25') 

我不太熟悉数组操作,所以我的问题是:我该如何实现这一目标?

积分优惠:
如果您可以提供的资源链接,我可以更多地了解这个事情。
答案应该适用于'无限'嵌套数组。

P.D.
我不是英语母语的人,我知道我的问题的标题应该是更通用的 ,如果你有更好的标题,请更改它。

回答

1

如果数组键是静态的,然后希望它帮助。

foreach($array as $key => $value) 
{ 
    foreach($value['distrubuitor'] as $k => $val) 
    { 
     foreach($val['machines'] as $m => $v) 
     { 
      mysql_query("INSERT INTO table1 VALUES ('".$value['id']."','".$val['name']."','".$v['id']."','".$v['installdate']."')"); 
     } 
    } 
} 
0

你可以使用一个递归函数,使得它适用于无限嵌套:

Function FlattenArray($previousvalues,$currentarrray) { 
    foreach($currentarray as $arraykey => $arrayitem) { 
     if(is_array($arrayitem)) { 
      $temp = $previousvalues.",'".$arraykey."'"; 
      FlattenArray($temp,$arrayitem); 
     } 
     else { 
      $query = "INSERT INTO table1 VALUES(".$previousvalues.",'".$arrayitem."')"; 
      mysql_query($query); 
     } 
    } 
} 

然后调用你的函数用适当的起始变量。确保table1有足够的列来处理最大可能的嵌套,否则你的mysql_query将失败。