Php 如何将阵列导出到csv
我想将此数组转换为csv导出文件。我尝试过这样的代码Php 如何将阵列导出到csv,php,arrays,csv,Php,Arrays,Csv,我想将此数组转换为csv导出文件。我尝试过这样的代码 ["Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:22, GENDER:MALE, Age:63,Bp_Systolic:120,Bp_Diastolic:80", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:27
["Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:22, GENDER:MALE, Age:63,Bp_Systolic:120,Bp_Diastolic:80", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:27, GENDER:FEMALE, Age:56,Bp_Systolic:110,Bp_Diastolic:70", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:33, GENDER:MALE, Age:58,Bp_Systolic:130,Bp_Diastolic:70", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:48, GENDER:FEMALE, Age:62,Bp_Systolic:132,Bp_Diastolic:80", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:50, GENDER:MALE, Age:60,Bp_Systolic:120,Bp_Diastolic:70", "Boxname:MH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:51, GENDER:MALE, Age:63,Bp_Systolic:118,Bp_Diastolic:62"]
但是我不能得到数据。有人能帮我吗。我试过很多方法。我认为我的数组格式有问题。任何人都可以从中建议数组格式,以方便导出。这是一个有效解决方案的示例,您可以将其用作基础:
<?php
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
// output the column headings
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));
$list=$name;
foreach ($list as $line)
{
fputcsv($output, $line);
}
?>
$maxSize=count($commentArray);
对于($c=0;$c<$maxSize;$c++){
$toCSV.=$nameArray[$c]。”;“$amountArray[$c]。”;“$dateArray[$c]。”;“$commentArray[$c]。”;“$bankaccount[$c]。”\n”;
}
文件内容($file$toCSV);
它循环遍历数组的所有元素,通过分隔值代码>s,当到达最后一个元素时,它会放置一个新行分隔符
将其作为一个整体连接后,文件内容将创建一个CSV文件 您正在将一个串接的值作为行传递给fputcsv()
,其中它希望每列都有一个数组元素。您的数据应拆分为每行的列值数组,即:
$maxSize = count($commentArray);
for ($c=0; $c < $maxSize; $c++) {
$toCSV .= $nameArray[$c] . ";" . $amountArray[$c] . ";" . $dateArray[$c] . ";" . $commentArray[$c] . ";" . $bankaccount[$c] . "\n";
}
file_put_contents($file, $toCSV);
更改此阵列是解决此问题的方法。如果无法更改数组的创建方式,则始终可以使用array\u map()
将其重新映射为fputcsv()
所期望的格式:
$name实际上是数组还是字符串?请检查此链接@markbaker its a array可能会有所帮助。实际上$name[0]=“Boxname:HH,X1:53.3,X2:106.6,Y1:33.30000000004,Y2:59.947215189873425,PID:22,性别:男性,年龄:63,收缩压:120,舒张压:80”;您显示的数据是一个数组,其中只有一个元素包含一个长文本值。这与数据中的任何“特殊字符”无关,fputcsv
已经做得非常好了。嘿,感谢您的解释。这个密码有效吗?如果你不介意的话,你可以用一件事来澄清我。实际上,我将数据从javascript数组发送到php。使用此代码$.post(“export.php”,{name:patient_数组,header:header}).done(函数(数据){alert(“数据加载:”+data);document.location.href='export.php';})在发送到PHP页面之前,我需要对数组进行序列化。我正在使用$_POST['name']接收它。这样做对吗?如果我是你,是的,我会在发布之前规范化你的数组。但是,在将数组传递到fputcsv()
并产生错误之前,一定要检查数组。是的,我认为我的数组有问题。我正在努力解决这个问题
$list = Array(
Array("Boxname:HH", "X1:53.3", "X2:106.6", "Y1:33.300000000000004", "Y2:59.947215189873425", "PID:22", "GENDER:MALE", "Age:63", "Bp_Systolic:120", "Bp_Diastolic:80"),
Array("Boxname:HH", "X1:53.3", ..)
//etc
)
$list = ["Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:22, GENDER:MALE, Age:63,Bp_Systolic:120,Bp_Diastolic:80", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:27, GENDER:FEMALE, Age:56,Bp_Systolic:110,Bp_Diastolic:70", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:33, GENDER:MALE, Age:58,Bp_Systolic:130,Bp_Diastolic:70", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:48, GENDER:FEMALE, Age:62,Bp_Systolic:132,Bp_Diastolic:80", "Boxname:HH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:50, GENDER:MALE, Age:60,Bp_Systolic:120,Bp_Diastolic:70", "Boxname:MH, X1:53.3, X2:106.6, Y1:33.300000000000004,Y2:59.947215189873425, PID:51, GENDER:MALE, Age:63,Bp_Systolic:118,Bp_Diastolic:62"];
$list = array_map(function($i){
return array_map("trim", // Trim the values
explode(",", $i) // Explode each row into an array of column values
);
}, $list);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));
foreach ($list as $line) {
fputcsv($output, $line);
}