我有一个格式如下的csv文件:
a;a1;1;0;1
b;b1;1;0;0
使用下面的php脚本,我可以将其转换为:
a;a1;1;
a;a1;0;
a;a1;1;
b;b1;1;
b;b1;0;
b;b1;0;
使用此:
$data = array();
foreach($lines as $value) {
$value = explode(";", $value);
$first = array_splice($value, 0, 2);
foreach($value as $x){
$row = $first;
$row[] = $x;
$data[] = implode(';', $row);
}
}
输出是数组:
array(6) {
[0]=>
string(6) "a;a1;1"
[1]=>
string(6) "a;a1;0"
[2]=>
string(6) "a;a1;1"
[3]=>
string(6) "b;b1;1"
[4]=>
string(6) "b;b1;0"
[5]=>
string(6) "b;b1;0"
}
现在我正在尝试将此数组插入到我已设置的mysql表中,但我遇到了麻烦......
$file = "_ss.csv";
$lines = file($file);
$count = count($lines);
$data = array();
$i = 0;
foreach($lines as $value){
$value = explode(";", $value);
$first = array_splice($value, 0, 2);
foreach($value as $x){
$row = $first;
$row[] = $x;
$data[] = implode(',', $row);
$dump = implode(',', $data);
$query="INSERT INTO csv_test2 VALUES ('$dump')";
$init=mysql_query($query);
$i++;
echo $dump;
}
}
echo "<pre>";
print_r($dump);
echo "</pre>";
任何想法如何使其发挥作用?
答案 0 :(得分:1)
好的,所以这就是我想出的解决方案。
foreach(explode($lineseparator,$csvcontent) as $value){
$lines++;
$value = trim($value," \t");
$value = str_replace("\r","",$value);
$value = str_replace("'","\'",$value);
$linearray = explode($fieldseparator,$value);
$linemysql = implode("','",$linearray); // sitas rdy siuntimui i db
$first = array_splice($linearray, 0, 2);
foreach($linearray as $x){
$row = $first;
$row[] = $x;
$data[] = implode("','",$row);
}
}
foreach ($data as $id) {
echo "<pre>";
var_dump($id);
echo "</pre>";
$query="INSERT INTO csv_test3 VALUES ('$id')";
$init=mysql_query($query);
}
这是代码的一部分,它基本上采用csv文件,格式化为@OP,将其转换并将所有内容转储到mysql表中。
答案 1 :(得分:0)
您有两个选择:
UPDATE:序列化的示例代码,请记住blob_test2
表有一个blob列,其中插入了序列化数组
$file = "_ss.csv";
$lines = file($file);
$count = count($lines);
$data = array();
$i = 0;
foreach($lines as $value){
$value = explode(";", $value);
$query="INSERT INTO blob_test2 VALUES ('".serialize($value)."')";
$init=mysql_query($query);
}
答案 2 :(得分:0)
您可以执行以下步骤
答案 3 :(得分:0)
$data = array();
foreach($lines as $value) {
$value = explode(";", $value);
$first = array_splice($value, 0, 2);
unset($value[3]); // <---------------------- point
foreach($value as $x){
$first[]=$x;
$data[] = $first;
}
}
foreach($data as $v){
$dump = implode(',', $v);
$query="INSERT INTO csv_test2 VALUES ('$dump')";
$init=mysql_query($query);
}
//mysql not good pls mysqli
答案 4 :(得分:0)
在foreach中没有查询的更好方法:
$data = array();
foreach ($lines as $value){
// do something
$data[] = "('".serialize($value)."')";
}
$query = mysql_query("INSERT INTO csv_test2 VALUES".implode(',', $data)."");
答案 5 :(得分:0)
首先,我建议您打印出查询。我已经对您的代码进行了一些修改以打印出查询:
$file = "_ss.csv";
$lines = file($file);
$count = count($lines);
$data = array();
$i = 0;
foreach($lines as $value){
$value = explode(";", $value);
$first = array_splice($value, 0, 2);
foreach($value as $x){
$row = $first;
$row[] = $x;
$data[] = implode(',', $row);
$dump = implode(',', $data);
$query="INSERT INTO csv_test2 VALUES ('$dump')";
echo $query."<br/>";
//$init=mysql_query($query);
$i++;
//echo $dump."<br/>";
}
}
在我身边,它打印类似于:
INSERT INTO csv_test2 VALUES ('a,a1,1')
csv_test2
只包含一个存储类型的字段
text(可以是varchar,char,...),这个查询就可以了。但如果它包含更多需要的字段(非空,唯一,......),则此查询将不起作用。你需要写:
INSERT INTO csv_test2(a_field_name)VALUES('a,a1,1')
但是如果你想插入对应于每个字段的数组的每个元素,那么在这种情况下你的代码将不起作用。你需要像这样进行查询:
INSERT INTO csv_test2 VALUES('a','a1','1')
因此,您需要执行$dump = implode("','", $data);