我正在尝试使用php和OOP方法直接从mysql表创建一个csv文件。这是我的代码:
$mysqli = new mysqli($host, $user, $pass, $database);
// Checking connection.
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$query = 'SELECT * FROM table';
$result = $mysqli->query($query);
while ($row = $result->fetch_array()) {
$rows[] = $row;
}
$array = "";
foreach($rows as $row) {
$array .= "\"".$row["genus"].",".$row["species"]."\",";
}
$list = array($array);
header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename=export.csv');
$file = fopen("php://output","w");
foreach ($list as $line) {
fputcsv($file,explode(',',$line));
}
fclose($file);
// Free result set.
$result->close();
// Close connection.
$mysqli->close();
在创建数组时,我的问题在于以下部分:
$array = "";
foreach($rows as $row) {
$array .= "\"".$row["genus"].",".$row["species"]."\",";
}
因为当我做一个print_r($ list);我没有收到预期的数组:
数组([0] =>“ homo,sapiens”,[1] =>“ homo,erectus”,
[2] =>“ homo,ergaster”,)
但是这个:
数组([0] =>“ homo,sapiens”,“ homo,erectus”,“ homo,ergaster”,)
而且当我手动创建数组时
$list = array("homo,sapiens","homo,erectus","homo,ergaster");
它工作正常,我收到正确的csv文件。
如果有人可以帮助我,请向我解释我做错了什么以及应该如何修复代码,我将不胜感激。
最佳答案
那是因为您将$array
视为字符串,而不是数组。
这应该工作:
$array = array();
foreach($rows as $row) {
$array[] = "\"".$row["genus"].",".$row["species"]."\",";
}
我认为您期望
$list = array($array);
行能够将逗号分隔的字符串神奇地转换为数组中的各个元素,但事实并非如此。