将数组转换为多个sql语句

时间:2009-09-03 06:35:11

标签: php arrays data-structures multidimensional-array

我有一个看起来像这样的数组

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')

我对数组操作并不十分精通,所以我的问题是:我怎样才能实现这个目标?

奖励点:
如果您可以提供资源链接,我可以了解更多相关信息。
答案最好使用'无限'嵌套数组。

Pd积。
我不是母语为英语的人,我知道我的问题标题应该更多 通用,如果你有更好的标题,请改变它。

3 个答案:

答案 0 :(得分: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']."')");  
        } 
    }
}

答案 1 :(得分:0)

您可以使用简单的foreach来实现此目的。

foreach ($array as $a => $b) {
  foreach ...
    foreach ...
}

链接:http://us.php.net/manual/en/control-structures.foreach.php

答案 2 :(得分: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将失败。