【问题标题】:Transform an array to several sql statements将一个数组转换为几条sql语句
【发布时间】:2009-09-03 06:35:10
【问题描述】:

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

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

我不太精通数组操作,所以我的问题是:我怎样才能做到这一点?

奖励积分:
如果您可以提供指向资源的链接,我可以在其中了解有关此内容的更多信息。
答案应该最好与“无限”嵌套数组一起使用。

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

【问题讨论】:

    标签: php arrays data-structures multidimensional-array


    【解决方案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']."')");  
            } 
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用简单的 foreach 来实现这一点。

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

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

      【讨论】:

        【解决方案3】:

        您可以使用递归函数,使其适用于无限嵌套:

        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 将失败。

        【讨论】:

          猜你喜欢
          • 2014-03-01
          • 2015-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          • 2013-02-15
          相关资源
          最近更新 更多