CSV ファイルを読み込んでいますが、一部の値がエスケープされていないため、PHP が間違って読み込んでいます。悪い行の例を次に示します。
" 635"," ","AUBREY R. PHILLIPS (1920- ) - 北ウェールズと思われる急勾配の川の渓谷にあるコテージを描いたパステル画、2000 年に署名および日付入り、66cm x 48cm の額入り。 「ハーベスト タイム、サマセット」署名および日付 '87、フレーム入り、69cm x 49cm. (2) NB - オーブリー フィリップスは、スタウアブリッジ スクール オブ アートで学んだウスターシャーのアーティストです。","40","60","WAT ","絵画、版画、水彩画",
Harvest Time、Somersetが引用符で囲まれていることがわかります。これにより、PHP はそれを新しい値と見なします。
各行で print_r() を実行すると、壊れた行は次のようになります。
Array
(
[0] => 635
[1] =>
[2] => AUBREY R. PHILLIPS (1920- ) - Pastel depicting cottages in a steep sided river valley, possibly North Wales, signed and dated 2000, framed, 66cm by 48cm. another of a rural landscape, titled verso Harvest Time
[3] => Somerset" signed and dated '87
[4] => framed
[5] => 69cm by 49cm. (2) NB - Aubrey Phillips is a Worcestershire artist who studied at the Stourbridge School of Art."
[6] => 40
[7] => 60
[8] => WAT
[9] => Paintings, prints and watercolours
[10] =>
)
他の正しい行よりも多くの配列要素が含まれるようになったため、これは明らかに間違っています。
私が使用しているPHPは次のとおりです。
$i = 1;
if (($file = fopen($this->request->data['file']['tmp_name'], "r")) !== FALSE) {
while (($row = fgetcsv($file, 0, ',', '"')) !== FALSE) {
if ($i == 1){
$header = $row;
}else{
if (count($header) == count($row)){
$lots[] = array_combine($header, $row);
}else{
$error_rows[] = $row;
}
}
$i++;
}
fclose($file);
}
間違った量の値を持つ行が入れられ$error_rows
、残りは大きな$lots
配列に入れられます。
これを回避するにはどうすればよいですか? ありがとう。