将PHP、CSV列放入单独的数组中
基本上,我想制作一个系统,用户可以上传CSV文件,并选择他们想要上传/处理的列 我可以用fopen和foreach很好地做到这一点, 但由于列的数量可能因CSV而异 我可以将拾取的列存储在数组中,例如picked[]=1,2,4//从1,2,3,4列开始 逗号分隔或者我想要的任何东西 但是我如何使用类似list1,2,4=爆炸,数据[]将PHP、CSV列放入单独的数组中,php,list,csv,explode,Php,List,Csv,Explode,基本上,我想制作一个系统,用户可以上传CSV文件,并选择他们想要上传/处理的列 我可以用fopen和foreach很好地做到这一点, 但由于列的数量可能因CSV而异 我可以将拾取的列存储在数组中,例如picked[]=1,2,4//从1,2,3,4列开始 逗号分隔或者我想要的任何东西 但是我如何使用类似list1,2,4=爆炸,数据[] 我可以动态地加载1,2,4,甚至1,2,3,4,然后我可以忽略3。好的,csv是一种二维数组,因为你得到了行索引和列索引 首先,必须拆分换行符\n才能将所有内容
我可以动态地加载1,2,4,甚至1,2,3,4,然后我可以忽略3。好的,csv是一种二维数组,因为你得到了行索引和列索引 首先,必须拆分换行符\n才能将所有内容拆分为单独的行。然后每行必须用逗号分隔。对于第一行,您将获得列名 所有这些都可以很容易地编码自己 或者可以使用fgetcsv函数 函数的解释如下:
您可以从每行中取消设置不需要的列:
$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索引的列编号。您可以使用array\u intersect\u key:返回一个数组,其中包含array1的所有条目,这些条目的键在所有参数中都存在
因此,首先需要逐行处理数据,例如,处理到
$data[column] = array(entries):
例如:
然后执行相交以获得具有选定列的数组:
$use = array_intersect_key($data, $selected);
谢谢,但是这里发生了什么:foreach$theData作为$k=>&$thisData{通过引用传递变量的标准foreach循环-通常PHP会创建一个数组副本以供foreach通过,并使用一个引用,即指向实际变量的链接,然后我们可以取消设置$thisData,并将该变量从$theData中删除-希望有意义!如果没有,请检查
$selected = array(1,2,4);
$use = array_intersect_key($data, $selected);