【发布时间】:2021-02-19 13:24:01
【问题描述】:
我有一个 csv 上传功能,可以保存到我的数据库表中。我想修改它以读取额外的数据行并相应地格式化数组。
表格将如下所示:
| Date | Cost Type 1 | Cost Type 2 | Cost Type 3 |
|---|---|---|---|
| £50.00 | £10.00 | £90.00 | |
| 01/01/21 | 1 | 3 | 10 |
| 02/01/21 | 5 | 4 | 12 |
我正在根据每个数字节省成本标题。因此,在我开始保存实际数据之前,我想读取每种类型的成本价格并将其保存到我的数组中。
$formattedArray = [];
foreach($the_array as $element) {
$formattedArray[] = [
"cost" => array_keys($element)[0],
"demand" => array_values($element)[0],
];
}
最终的数组应该是这样的:
array(
[0] => Array
(
[date] => 01/01/21
[cost] => Cost Type 1
[demand] => 1
[total] => £50.00
)
[1] => Array
(
[date] => 01/01/21
[cost] => Cost Type 2
[demand] => 3
[total] => £10.00
)
[2] => Array
(
[date] => 01/01/21
[cost] => Cost Type 3
[demand] => 10
[total] => £90.00
)
)
我的 csv 上传功能是这样的:
if ($this->request->data['file']['error'] === UPLOAD_ERR_OK){
$i = 1;
if (($file = fopen($this->request->data['file']['tmp_name'], "r")) !== FALSE) {
while (($row = fgetcsv($file, 0, ',', '"')) !== FALSE) {
if ($i == 1){
$header = $row;
}else{
if (count($header) == count($row)){
$uploads[] = array_combine($header, $row);
}else{
$error_rows[] = $row;
}
}
$i++;
}
fclose($file);
}
}
【问题讨论】:
-
这个问题首先需要适当的详细信息。您显示的那个“表格” - 这应该是您的实际 CSV 文件包含的内容吗?那么创建“最终数组”背后的逻辑是什么?这似乎只取了第一个数据行中的值——第二个呢?如果这不重要,请解释为什么不重要。
-
我的 csv 目前包含上述内容,没有任何费用 - 我想添加费用。所有行都很重要,我仅以数组中的第一个循环为例。每个电子表格的标题会有所不同,因此我在保存数据时会对其进行编码 - 我需要将成本类型和价格与每个需求频率一起保存。