1

基本的には、ユーザーがCSVファイルをアップロードして、アップロード/処理する列を選択できるシステムを作りたいと思っています。

fopenとforeachを使用してこれをうまく行うことができますが、列の数がCSVごとに異なる可能性があるためです。

選択した列を配列に格納できます。例:picked [] = "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

各行から不要な列を設定解除できます。

$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 に答える
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

行インデックスと列インデックスを取得したため、csvは2次元配列のようなものです。

最初に、改行 (\n) を分割して、すべてを別々の行に分割する必要があります。次に、各行をコンマで区切る必要があります。最初の行には、列名があります。

これはすべて自分で簡単にコーディングできます...

または、 fgetcsv関数を使用できます

関数は次の場所で説明されています: http://php.net/manual/en/function.fgetcsv.php

于 2010-03-11T13:56:55.940 に答える