質問
アップロードされたファイルからデータを単一のディメンション配列に挿入しようとしています。
ファイルは、次のような行に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配列を作成するように設定することは可能ですか?
どうもありがとう、
解決
質問1はそのためです
print_r($_FILES['csv_file']);
$file = fopen('$file_path', 'r');
あるべきです:
$file = fopen($file_path, 'r');
質問2については、をチェックしてください array_push
他のヒント
最初の質問:
この行は、単一の引用符を使用しているため、実際に「$ file_path」というファイルを開こうとします(したがって、変数の値に拡張されません)。引用符を削除するだけです。
$file = fopen('$file_path', 'r');
$file
この後のnullです。
2番目の質問:
あなたがしたいのは、ファイルを行で配列に変換することだけであれば、代わりにこれらのいずれかを使用できます。
ファイル() - ファイル全体をファイルの1D配列に入手します(必要なものに最も近い)
fgets() - 通話ごとに1行あたりの文字列を取得します。それが偽りになるまでこれを呼び出し続けて、各ラインを一度に1つずつ取得します
file_get_contents() - ファイル全体を文字列に入れて、好きなように処理します
php.netによると、$ lineは配列として返す必要があります。 「読み取りフィールドを含む配列を返します。」ただし、1つの学生番号のみが含まれていると確信している場合は、$ line [0]を使用して最初の行の値を取得できます(「、」を無視してください)
コードに関する一般的なコメントを次に示します。
- ファイルパスをに渡しています
fopen()
誤って機能します。変数は、単一の引用符で囲まれてはなりません。 - 処理後にCSVファイルを削除するため、移動する必要はありません。単に使用してください
$_FILES['csv_file']['tmp_name']
ファイルへのパスとして。 - CSVファイルには行ごとに1つのエントリしかないため、から返される配列の最初の要素にアクセスするだけです
fgetcsv()
:$numbers[] = $line[0];