[英]PHP, CSV columns into separate arrays
基本上,我想建立一个用户可以上传CSV文件并选择他们要上传/处理哪些列的系统
我可以通过使用fopen和foreach来做到这一点,但是由于列数可能因CSV或CSV有所不同。
我可以将选择的列存储在数组中,例如picked [] =“ 1,2,4”; //从1,2,3,4列中以逗号分隔或无论如何我都想要
但是我该如何使用list(1,2,4)= explode(“,”,theData [])之类的东西;
我可以在其中动态加载1,2,4,甚至1,2,3,4,然后我可以忽略3。
当您获得行索引和列索引时,csv就是二维数组。
首先,您必须将换行符(\\ n)拆分为单独的行。 然后,每行必须用逗号分隔。 对于第一行,您将具有列名。
所有这些都可以轻松地自己编写。
或者您可以使用fgetcsv函数
有关功能的说明,请参见 : http : //php.net/manual/en/function.fgetcsv.php
您可以从每一行中取消设置不需要的列:
$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索引的列号。
您可以使用array_intersect_key() :“返回一个数组,其中包含array1的所有条目,这些条目的所有参数中都包含键。”
http://www.php.net/manual/zh/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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.