我有一个PHP页面向用户显示查询内容。
如果传递了csv参数,我让用户以 csv 格式下载结果,如下所示:
$stmt = $pdo->prepare($query_select);
$stmt->execute($params);
if ($format == 'csv'){
$fobj = fopen('php://output', 'w');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $search_text . '.csv"');
$i = 0;
foreach ($stmt as $row) {
if (!$i++) {
fputcsv($fobj, array_keys($row));
}
fputcsv($fobj, array_values($row));
}
fclose($fobj);
exit();
}
问题是$row
包含如下数据:
Array
(
[name] => apple
[0] => apple
[colour] => red
[1] => red
)
所以我的 CSV 文件最终会出现重复数据:
name,0,colour,1
apple,apple,red,red
这可能是获得用户期望的明智方法?
name,colour
apple,red
设置获取模式,如下所示:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
如果出于某种原因不想使用该PDO:FETCH_ASSOC
,则可以将其用于数组:
array_filter( $array, 'is_string', ARRAY_FILTER_USE_KEY );
这将返回一个数组,其中包含仅字符串的键