我有一个csv上传功能,可以保存到数据库表中。我想修改它以读取额外的数据行并相应地格式化数组。
该表将如下所示:
日期 | 费用类型1 | 费用类型2 | 费用类型3 |
---|---|---|---|
£50.00 | £10.00 | £90.00 | |
21年1月1日 | 1个 | 3 | 10 |
21/02/01 | 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);
}
}
我想我收到了您的问题,您的意思是说数据不是从第二行开始,而是第二行包含其他信息,然后数据从第三行开始。
在这种情况下,您需要做的只是解析第二行,就像解析第一行一样,然后存储和使用变量中的值/使用变量中的值。
if ($this->request->data['file']['error'] === UPLOAD_ERR_OK) {
$i = 1;
$finalArray = [];
if (($file = fopen($this->request->data['file']['tmp_name'], "r")) !== FALSE) {
while (($row = fgetcsv($file, 0, ',', '"')) !== FALSE) {
if ($i == 1) {
$header = $row;
} elseif ($i == 2) {
$priceInfo = $row;
} else {
if (count($header) == count($row)) {
$rowArray = [];
for ($i = 1; $i < count($row); $i++) { // Starting from 1 as we need to skip the first column
$rowArray[] = [
"cost" => $header[$i],
"demand" => $row[$i],
"total" => $priceInfo[$i],
"date" => $row[0],
];
}
$finalArray[] = $rowArray;
} else {
$error_rows[] = $row;
}
}
$i++;
}
fclose($file);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句