基本上,我想创建一个系统,用户可以上传CSV文件并选择他们想要上传/处理的列
我可以通过使用fopen和foreach来做到这一点, 但由于列数可能会因CSV而异....
我可以将拾取的列存储在一个数组中,例如pick [] =“1,2,4”; //来自1,2,3,4列 逗号分开或无论如何我想要。
但我怎么能使用像list(1,2,4)= explode(“,”,theData [])之类的东西;
我可以在那里加载1,2,4,动态地,甚至1,2,3,4然后我可以忽略3。
答案 0 :(得分:0)
当你得到行索引和列索引时,csv就是一个二维数组。
首先,您必须拆分换行符(\ n)以将所有内容拆分为单独的行。然后每行必须用逗号分隔。对于第一行,您将拥有列名。
所有这一切都可以轻松编码......
或者您可以使用 fgetcsv 功能
答案 1 :(得分: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
循环和unset
中的0索引调整 - 这是因为您在示例中使用了非0索引的列号。
答案 2 :(得分: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);