php - 在php中将数组字符串转换为csv
问题描述
我有一个带有字符串的数组,array("firstname" => "Mary", "lastname" => "Johnson", "age" => '0025')
我想导出到 csv 文件,但是当我导出到 csv 文件时,我没有像 25 这样的 0。
我尝试了这些代码,我得到了没有 0 的结果
$data = array(
array("firstname" => "Mary", "lastname" => "Johnson", "age" => '0025')
);
$colnames = array(
'firstname' => "Fname",
'lastname' => "Last name",
'age' => "Age",
);
function map_colnames($input)
{
global $colnames;
return isset($colnames[$input]) ? $colnames[$input] : $input;
}
function cleanData(&$str)
{
if($str == 't') $str = 'TRUE';
if($str == 'f') $str = 'FALSE';
if(preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
$str = "$str";
}
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// filename for download
$filename = "website_data_" . date('Ymd') . ".csv";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: text/csv");
$out = fopen("php://output", 'rw');
$flag = false;
foreach($data as $row) {
if(!$flag) {
// display field/column names as first row
$firstline = array_map(__NAMESPACE__ . '\map_colnames', array_keys($row));
fputcsv($out, $firstline, ',', '"');
$flag = true;
}
array_walk($row, __NAMESPACE__ . '\cleanData');
fputcsv($out, array_values($row), ',', '"');
}
fclose($out);
exit;
我得到了这些结果
Fname Lastname Age
MAry Johnson 25
有什么解决办法吗?
解决方案
推荐阅读
- java - ID 可能未使用 @GeneratedValue 初始化
- java - Spring安全抛出未经授权而不是重定向到登录
- angular - 使用服务的具有多个表单的单个提交按钮
- php - PHP 表单操作找不到文件。PHP
- python - 在 pytube 中显示进度
- postgresql - psycopg2.errors.IdleInTransactionSessionTimeout:由于空闲事务超时而终止连接
- javascript - 从 Create React App 中删除内联样式
- php - WooCommerce:从每个捆绑产品中获取数据
- python - Python DataFrame 列成行
- python - 如何将 numpy.int32 转换为 decimal.Decimal