1

基本上,我想创建一个系统,用户可以在其中上传 CSV 文件并选择他们想要上传/处理的列

我可以通过使用 fopen 和 foreach 来做到这一点,但由于列的数量可能因 CSV 到 CSV 而异......

我可以将选取的列存储在一个数组中,例如pick[]=“1,2,4”;//从 1,2,3,4 列逗号分隔或无论如何我想要。

但是我如何使用 list(1,2,4) = explode("," , theData[]);

我可以在其中动态加载 1,2,4,甚至 1,2,3,4,然后我可以忽略 3。

4

3 回答 3

0

好吧,当您获得行索引和列索引时,csv 是一种二维数组。

首先,您必须拆分换行符 (\n) 以将所有内容拆分为单独的行。然后每一行必须用逗号分隔。对于第一行,您将拥有列名。

所有这些都可以很容易地自己编码......

或者你可以使用fgetcsv函数

函数得到解释: http: //php.net/manual/en/function.fgetcsv.php

于 2010-03-11T13:56:55.940 回答
0

您可以使用array_intersect_key():“返回一个数组,其中包含 array1 的所有条目,这些条目具有所有参数中都存在的键。”

http://www.php.net/manual/en/function.array-intersect-key.php

所以首先你需要逐行处理数据,例如到一个看起来像的数组

$data[column] = array(entries):

例子:

$data = array(
  1 => array (
    entry1,
    entry2,
    etc
  ),
  2 => etc
);

然后你向用户展示有哪些列,用户选择他喜欢使用的列,例如:

$selected = array(1,2,4);

然后进行相交以获取包含选定列的数组:

 $use = array_intersect_key($data, $selected);
于 2010-03-11T14:06:59.823 回答
0

您可以从每一行取消设置不需要的列:

$theData = array(
    array( 'col1', 'col2', 'col3', 'col4', 'col5' ),
    array( 'col1', 'col2', 'col3', 'col4', 'col5' ),
    array( 'col1', 'col2', 'col3', 'col4', 'col5' )
    );
$picked = '1, 3, 5';

$totalColumns = count( $theData[0] );
$columns = explode( ',', $picked );
foreach( $theData as $k => &$thisData ) {
    for( $x = 1; $x < $totalColumns + 1; $x++ ) {
        if( ! in_array( $x, $columns ) ) {
            unset( $thisData[$x - 1] );
        }
    }
}

for注意循环中的 0 索引调整unset- 这是因为您在示例中使用了非 0 索引的列号。

于 2010-03-11T14:06:41.070 回答