php - CSV文件和特殊字符具有相同键和不同值的多个PHP数组
问题描述
我有许多共享相同键但值不同且顺序不同的数组:
$array = array(
'English' => array(
'1' => 'Apples',
'2' => 'Oranges',
'3' => 'Bananas'
),
'Spanish' => array(
'3' => 'Plátanos',
'1' => 'Manzanas',
'2' => 'Naranjas'
),
'German' => array(
'1' => 'Äpfel',
'3' => 'Bananen',
'2' => 'Orangen'
),
);
我想从数组中创建一个 CSV 文件,期望每个数组值列在与图像中具有相同键的其他数组的值旁边的列中:
我试过这个:
$header = array(
'Key', 'English', 'Spanish', 'German'
);
$f_name = 'lang.csv';
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$f_name");
$output = fopen("php://output" , "w");
fputcsv($output, $header);
foreach($array as $row){
fputcsv($output , array_values( $row ));
}
fclose($output);
但结果如下图所示:
解决方案
您的代码尝试对仅包含 3 个值的 $row 的 fputcsv 并且您想要 4 个值作为键,而其他值...
首先要做的事情:对这些字符编码使用 UTF-8,您的文本应该没问题——这意味着您的 php 文件编码应该是 UTF-8。
正如 nitrin0 指出的那样,ksort($row); 是一件好事。但是您想向仅包含 3 个值的 $row 添加第四个值,即使使用 ++$c 也添加键,此处 array_values 也是多余的。
例子:
<?php
$array = array(
'English' => array(
'1' => 'Apples',
'2' => 'Oranges',
'3' => 'Bananas'
),
'Spanish' => array(
'3' => 'Plátanos',
'1' => 'Manzanas',
'2' => 'Naranjas'
),
'German' => array(
'1' => 'Äpfel',
'3' => 'Bananen',
'2' => 'Orangen'
),
);
$header = array(
'Key', 'English', 'Spanish', 'German'
);
$output = fopen("php://output" , "w");
fputcsv($output, $header);
$c = 1;
foreach($array as $row){
$row[0] = $c;
ksort($row);
++$c;
fputcsv($output , $row);
}
fclose($output);
将输出:
Key,English,Spanish,German
1,Apples,Oranges,Bananas
2,Manzanas,Naranjas,Plátanos
3,Äpfel,Orangen,Bananen
该解决方案在很大程度上依赖于这样一个事实,即在您的 $array 数组中,您没有 0 个水果键......
因此,您可以在不依赖不存在的 0 键和没有 ksort 但使用合并的情况下工作:
$c = 1;
foreach($array as $row){
$arr[] = $c;
$arr = array_merge($arr,$row);
//print_r($arr);
//ksort($row);
++$c;
//print_r($row);
fputcsv($output , $arr);
$arr = [];
}
fclose($output);
echo '<pre>';
print_r($output);
将输出与其他代码示例相同的输出。
推荐阅读
- typescript - 为什么 TypeScript 在 strictNullChecks 下允许在三元内赋值?
- c - 使用指针在当前记录下方添加新记录
- ocaml - ocaml:为什么特定类型不匹配'签名
- javafx - MVC 中的 JavaFX 更改场景(视图)
- sapui5 - 为什么模型上的刷新不起作用?
- javascript - 云函数返回 NULL
- spring - Spring + Eureka Connection 拒绝注册服务
- mysql - 如何将不同表中的数据添加到 mySQL 中的一个新表中?
- kubernetes - 如何获取 Kubernetes pod 的状态历史/沿袭
- javascript - Webpack 包含用于动态导入的目录