繁体   English   中英

PHP,CSV列分成单独的数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM