2

アップロードされたファイルのデータを単一の次元配列に挿入しようとしています。

このファイルは、次のように1行に1つの学生番号があるようなものです。

392232、392231など
_

これは私がオンラインで見つけた最も一般的な方法です:

while (($line = fgetcsv($file, 25, ',')) !== FALSE) {
        //$line is an array of the csv elements
        print_r($line);
        }

ただし、私が理解している形式では、これにより$line各行に配列()が作成されます。それは私が望むものではありません。

それはさておき、ftgetcsv()を使用した後、これが機能していて、コードが配列を出力しないかどうかを確認するためにこれを試しました。ファイルは正常にアップロードされています。

これが私のコードです:

    if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){

    //create file name
    $file_path = "csv_files/" . $_FILES['csv_file']['name'];

    //move uploaded file to upload dir
    if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {
        //error moving upload file
        echo "Error moving uploaded file";
    }

    print_r($_FILES['csv_file']);

    $file = fopen('$file_path', 'r');

    while (($line = fgetcsv($file, 25, ',')) !== FALSE) {
    //$line is an array of the csv elements
    print_r($line);
    }

    //delete csv file
    unlink($file_path);
}

まず、少なくともデータの個別の配列(各行)としてそれらを出力することが機能しない理由を誰もが明らかに理解できますか?

次に、ファイル内のすべての行の1d配列を作成するように設定することは可能ですか?

どうもありがとう、

4

4 に答える 4

2

質問1は

print_r($_FILES['csv_file']);
$file = fopen('$file_path', 'r');

する必要があります:

$file = fopen($file_path, 'r');

質問2については、array_pushを確認してください

于 2011-05-03T18:03:32.220 に答える
1

PHP.netによると、$lineは配列として返す必要があります。「読み取られたフィールドを含む配列を返します。」ただし、学生番号が1つだけ含まれていることが確実な場合は、$ line [0]を使用して最初の行の値を取得できます(「、」は無視します)。

于 2011-05-03T18:10:50.080 に答える
1

最初の質問:

この行は、一重引用符を使用しているため、実際には「$ file_path」というファイルを開こうとします(したがって、変数の値に展開されません)。引用符を削除するだけです。

$file = fopen('$file_path', 'r');

$fileこの後はnullです。

2番目の質問:

ファイルを行ごとに配列に変換するだけの場合は、代わりに次のいずれかを使用できます。file
() -ファイル全体をファイルの行の1D配列に変換します(必要なものに最も近い)
fgets() -呼び出しごとに行ごとに文字列を取得します。falseが返されるまでこれを呼び出し続けて、各行を一度に1つずつ取得します
file_get_contents() -ファイル全体を文字列に取得し、必要に応じて処理します

于 2011-05-03T18:01:09.620 に答える
1

コードに関する一般的なコメントは次のとおりです。

  1. ファイルパスをfopen()関数に誤って渡しています。変数は一重引用符で囲まないでください。
  2. CSVファイルは処理後に削除するため、移動する必要はありません。$_FILES['csv_file']['tmp_name']ファイルへのパスとして使用するだけです。
  3. CSVファイルには行ごとに1つのエントリしかないため、次から返される配列の最初の要素にアクセスするだけですfgetcsv()$numbers[] = $line[0];
于 2011-05-03T18:12:41.000 に答える