3

アップロードされた csv ファイルがあり、csv ファイルに含まれるエントリの数を特定し、最初、中間、および最後の列を $header=>$value ペアの連想配列にフォーマットする必要があります。csv全体を配列にフォーマットするコードがあります

function csv_to_array($filename='', $delimiter=',') {
   if(!file_exists($filename) || !is_readable($filename)){
      return FALSE;
    }

$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        if(!$header) {
            $header = $row;
        }else{
            $data[] = array_combine($header, $row);
        }
    }

    fclose($handle);
}

  return $data;
}

しかし、これを行う方法を決定する限り、私は立ち往生しています。どんな助けでも大歓迎です。可能性のあることの1つは、上記のこの関数を使用して配列を取得し、他の関数を記述して、この配列の最初の中間と最後のみを取得し、残りをダンプすることです(ただし、次のように行う方法を知る必要があります)始まりと終わりを決めるまで

4

1 に答える 1

6

あなたがファイルを読んでいるように、私はこれを処理します。

// how many total columns
$total = count( $row ); 

// get the halfway point (and round up if a decimal)
$middle = ceil( $total/2 );

// Form a new row using the first (0), last ($total-1) and middle ($middle)
$new_row = array( $row[0], $row[ $middle ], $row[ $total-1 ] );

コード内に埋め込む:

function csv_to_array($filename='', $delimiter=',') {
   if(!file_exists($filename) || !is_readable($filename)){
      return FALSE;
    }

$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {

        $total = count( $row ); 
        $middle = ceil( $total/2 );
        $new_row = array( $row[0], $row[ $middle ], $row[ $total-1 ] );

        if(!$header) {
            $header = $new_row;
        }else{
            $data[] = array_combine($header, $new_row);
        }
    }

    fclose($handle);
}

  return $data;
}

ファイル全体の各行の列数が同じであると想定することで、処理能力をいくらか軽減できます。その場合は、次のように 1 回だけカウントする必要があります。

function csv_to_array($filename='', $delimiter=',') {
   if(!file_exists($filename) || !is_readable($filename)){
      return FALSE;
    }

$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {

        if ( !$total ){ // Verify if we have the total yet, and if not:
            $total = count( $row ); 
            $middle = ceil( $total/2 );
        }
        $new_row = array( $row[0], $row[ $middle ], $row[ $total-1 ] );

        if(!$header) {
            $header = $new_row;
        }else{
            $data[] = array_combine($header, $new_row);
        }
    }

    fclose($handle);
}

  return $data;
}
于 2013-05-01T16:30:36.483 に答える