0

我有一些不同的 CSV 文件,其中包含由 WR 分隔的输入块

我想用数据制作四个单独的数组。

例如。

Datum;Uhrzeit;WR;Status;SolIrr;TmpMod;TmpAmb;Wind;DaySumIrr;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac

将是四个阵列。

WR;Status;SolIrr;TmpMod;TmpAmb;Wind;DaySumIrr;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;

然后将这四个数组插入到四个不同的 MySQL 表中。

我已经成功地将标题正确拆分为四个数组,但是我不知道如何将 csv 中的每一行数据拆分为单独的数组。

我希望我说得通。

谢谢

4

4 回答 4

1

如果我正确理解您的需求,您可以使用 php 中的explode方法将您的字符串从 csv 文件拆分为一个数组。使用 ; 作为分隔符:)

我希望这有帮助。

于 2012-10-04T11:32:35.773 回答
0

根据我从您的问题中了解到的情况,这是我提出的解决方案。首先,根据 headers 获取 WR 的排序方式,然后生成偏移长度键值对。使用该键值对对从每个 csv 行分解的数据数组进行切片。

<?php

  $headers = "Datum;Uhrzeit;WR;Status;SolIrr;TmpMod;TmpAmb;Wind;DaySumIrr;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac";
  $headers_arr = explode(";", $headers);

  // track where WR is positioned in the array
  $WR_offset = array();
  foreach ($headers_arr as $i => $value) {
    if ($value == "WR") { $WR_offset[] = $i; }
  }
  $WR_offset[] = count($headers_arr); // assume imaginary WR as last header

  // loop through the WR_offset array,
  // to get the WR position, and the number of fields before the next WR position
  // to be used in array_slice
  for ($i = 0; $i < count($WR_offset) - 1; $i++) {
    $offset = $WR_offset[$i] + 1; // 
    $length = $WR_offset[$i+1] - $WR_offset[$i] - 1;
    // store the offset and length as key-value pair
    $slice_params[$offset] = $length;
  }

  // assuming $lines contains the CSV data rows, and $line is a single CSV data row
  foreach ($lines as $line) {
    $row_array = explode(";", $line);
    // loop through the generated offset-length value pair
    foreach ($slice_params as $offset => $length) {
      $array_chunks = array_slice($row_array, $offset, $length);
      // do what you want to do with the chunk here
    }
  }

?>
于 2012-10-04T12:08:40.360 回答
0

使用这样的内置explode函数:

<?php

$string = 'WR;Status;SolIrr;TmpMod;TmpAmb;Wind;DaySumIrr;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;
WR;Pac;DaySum;Status;Pdc1;Pdc2;Pdc3;Udc1;Udc2;Udc3;Temp;Uac;';

# convert into lines
$lines = explode( PHP_EOL, $string );

# convert into items
$items = array();
foreach ( $lines as $line ) {
    $items[] = explode( ';', $line );
}

?>
于 2012-10-04T11:37:08.343 回答
0

你可以通过exploding数组来做到这一点

$filename=explode(";",$string);
于 2012-10-04T11:37:58.307 回答