0

簡単に言えば、HTML フォームから CSV ファイルをアップロードし、それを PHP の配列として保存できるスクリプトがあります。このスクリプトはうまく機能していますが、CSV ファイルを多次元配列として保存する必要があります。

これは私のCSVファイルがどのように見えるかです:

question1,answer1,answer2,answer3,answer4
question2,answer1,answer2,answer3,answer4
question3,answer1,answer2,answer3,answer4

これは、要素を保存する順序です。

uploaded[1][1],uploaded[1][2],uploaded[1][3],uploaded[1][4],uploaded[1][5]
uploaded[2][1],uploaded[2][2],uploaded[2][3],uploaded[2][4],uploaded[2][5]
uploaded[3][1],uploaded[3][2],uploaded[3][3],uploaded[3][4],uploaded[3][5]

これは私の作業用アップロードスクリプトです

<?php

if(isset($_POST['savecsv']))
{
    $csv_array = Array();
    $file = fopen($_FILES['upload_file']['tmp_name'], 'r');
    if($file){
        while (($line = fgetcsv($file)) !== FALSE) {
          //$line is an array of the csv elements
          array_push($csv_array,$line);
        }
        fclose($file);
    }
}

?>


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
 <input type="file" name="upload_file" />
 <input type="submit" name="savecsv"/>
</form>

配列が値 0 から始まることは知っていますが、この CSV は Web サイトのクイズに質問を追加するためのアップロード バージョンです。コードの残りの部分をセットアップした方法では、[1][1] から上方向のみが処理されます。それはトピックから外れているため、理由を詳しく説明する必要はありませんが、それは私がそれを行うために必要な方法です. したがって、[0] はすべて空白のままにする必要があると思います。

また、各行には常に 1 行あたり 5 つの要素があります。それ以上でもそれ以下でもありません。

私はオンラインで広範囲に検索しましたが、これに適した答えが見つからないようです。

すべてのヘルプは大歓迎です。

4

2 に答える 2

0

あなたが現在やろうとしていることは、この問題にアプローチする良い方法ではありません。コードの残りの部分を変更して、適切な配列インデックスを使用することをお勧めします。ただし、単純に にプッシュ$lineする代わりに$csv_array、次のようにすることができます。

$csv_array[] = array_combine(range(1, count($line)), array_values($line));

完全なコード:

if(isset($_POST['savecsv']))
{
  $file = fopen($_FILES['upload_file']['tmp_name'], 'r');
  if($file) {
    while (($line = fgetcsv($file)) !== FALSE) {
    $csv_array[] = array_combine(range(1, count($line)), array_values($line));
    }
    fclose($file);
  }
}

出力:

Array
(
    [0] => Array
        (
            [1] => question1
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [1] => Array
        (
            [1] => question2
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [2] => Array
        (
            [1] => question3
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

)

お役に立てれば!

于 2013-08-22T06:25:08.547 に答える
0

あなたがする必要がありますarray_unshift

array_unshift(0, $line);

したがって、レコードの統計はインデックス 1 で、インデックス 0 で 0 になります。$csv_arrayまた、次のように初期化しました

$csv_array = array(array());
于 2013-08-22T06:10:56.973 に答える