删除PDO语句行整数键和相对值的智能方法



我有一个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 );

这将返回一个数组,其中包含仅字符串的键

最新更新