加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 动态合并数组的算法

发布时间:2020-12-13 17:10:06 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试为 PHPExcel对象中的每一行创建一个INSERT语句.由于我一直在努力迭代整个列(即转到B1 C1 D1,获取值,并将它们放入数组中),我选择获取每列的所有值并将它们放入多维中看起来像这样的数组: Array( [foo] = Array ( [0] = 250 [1] = 247 [2] = 279 [3
我正在尝试为 PHPExcel对象中的每一行创建一个INSERT语句.由于我一直在努力迭代整个列(即转到B1 C1 D1,获取值,并将它们放入数组中),我选择获取每列的所有值并将它们放入多维中看起来像这样的数组:

Array
(
    [foo] => Array
        (
            [0] => 250
            [1] => 247
            [2] => 279
            [3] => 249
        )

    [bar] => Array
        (
            [0] => AM PROV
            [1] => AM PROV
            [2] => AM PENS
            [3] => AM PROV
        )

    [schoo] => Array
        (
            [0] => xxxx
            [1] => yyy
            [2] => zzz
            [3] => aaa
        )
)

我想合并每个数组,以便索引0处的所有数据都在一个数组中,等等.我已经构建了一个通用工具,允许您从上传的电子表格中选择所需的列.它需要首先将列数据合并到一个数组中,然后它应该为每个数组生成INSERT语句.所以最终的可交付成果如下:

INSERT INTO(foo,bar,schoo)VALUES(250,“AM PROV”,“xxxx”);

所有帮助赞赏.

更新:嘿所有,非常感谢你的答案.根据Mark的建议,我终于设法使用行和单元迭代器,并且它正在工作.我现在有一个单独的问题,但我认为这是我可以解决的问题.再次感谢.

解决方法

<?php
$uberArray = array(
    "foo" => array(
        0 => 250,1 => 247,2 => 279,3 => 249,),"bar" => array(
        0 => "AM PROV",1 => "AM PROV",2 => "AM PENS",3 => "AM PROV","schoo" => array(
        0 =>  "xxxx",1 =>  "yyy",2 =>  "zzz",3 =>  "aaa",)
);

$yourMysqlLink = mysql_connect('localhost','user','pass');
mysql_query('SET NAMES utf8'); // Adjust according to your encoding

$colNames = array_keys($uberArray);
$stringCols = array('bar','schoo');
$sqlInsertStr = 'INSERT INTO `your_table` (`'.implode('`,`',$colNames)."`) VALUES n";

$rows = array();
// Not really for iterating the first array,we just need a loop
foreach ($uberArray[$colNames[0]] as $k => $v) {
    $vals = array();
    foreach ($colNames as $v2) {
        $val = $uberArray[$v2][$k];
        if (in_array($v2,$stringCols)) {
            $val = "'".mysql_real_escape_string($val,$yourMysqlLink)."'";
        }
        $vals[] = $val;
    }
    $rows[] = "t(".implode(',',$vals).")";
}
$sqlInsertStr .= implode(",n",$rows).';';

echo '<pre style="clear:both;">'.$sqlInsertStr.'</pre>'; ;

请注意,如果$uberArray较大(例如将插入字符串拆分为块),则可能需要针对性能原因进行一些调整.或者您可以将数据转换为CSV并使用MySQL LOAD DATA INFILE方法,这是非常快的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读