回答編集履歴

3

加筆修正

2019/04/30 12:05

投稿

退会済みユーザー
test CHANGED
@@ -91,3 +91,9 @@
91
91
  Excelで作ったCSVを読み込むためには
92
92
 
93
93
  先にfile_get_contents()で読み込んでから[mb_convert_encoding](https://www.php.net/manual/ja/function.mb-convert-encoding.php)してファイルを保存し直してから読み込ませる。
94
+
95
+
96
+
97
+ [PHPでSJISのCSVを読み込んでUTF-8として処理する場合のサンプルコード - Qiita](https://qiita.com/knt45/items/8cd383382b8a69ee939c)
98
+
99
+ この事例だと'SJIS'から変換しているが、'SJIS-win'としておくのが良さげ。

2

見直し

2019/04/30 12:05

投稿

退会済みユーザー
test CHANGED
@@ -20,7 +20,17 @@
20
20
 
21
21
  ```php
22
22
 
23
+ <html>
24
+
25
+ <head>
26
+
27
+ </head>
28
+
29
+ <body>
30
+
31
+ <?php
32
+
23
- $fp = new SplFileObject(__DIR__.'/data/excel.csv');
33
+ $fp = new SplFileObject(__DIR__.'/187142_data.csv');
24
34
 
25
35
  $fp->setFlags(SplFileObject::READ_CSV);
26
36
 
@@ -30,19 +40,17 @@
30
40
 
31
41
  foreach ($fp as $line) {
32
42
 
33
- if ($fp->key() > 0 && ! $fp->eof()) { // <- ここいらへんはよくわからんので放置
43
+ if (count($line) > 0)) {
34
44
 
35
- var_dump($line);
45
+ $table[] = $line; // $lineが1行分のCSVデータの配列
36
46
 
37
47
  }
38
-
39
- $table[] = $line; // $lineが1行分のCSVデータの配列
40
48
 
41
49
  }
42
50
 
43
51
 
44
52
 
45
- ?><table>
53
+ ?><table border="1">
46
54
 
47
55
  <?php
48
56
 
@@ -69,3 +77,17 @@
69
77
  ```
70
78
 
71
79
  とか。
80
+
81
+
82
+
83
+ ![イメージ説明](330cb9a2f2ff35455aed0f52f19fad5f.png)
84
+
85
+
86
+
87
+ 若干ずるいかもしれないが、
88
+
89
+ CSVファイルは改行コードLF、エンコーディングはBOMなしUTF-8だが、
90
+
91
+ Excelで作ったCSVを読み込むためには
92
+
93
+ 先にfile_get_contents()で読み込んでから[mb_convert_encoding](https://www.php.net/manual/ja/function.mb-convert-encoding.php)してファイルを保存し直してから読み込ませる。

1

見直し

2019/04/30 12:02

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,71 @@
1
1
  foreachループの中でvar_dump()だけしかしないの?
2
2
 
3
3
  foreachループの外で$tableとかつくってるけど、最後に読み込んだ行しか反映されない件。
4
+
5
+
6
+
7
+ [PHP: SplFileObject::fgetcsv - Manual](https://php.net/manual/ja/splfileobject.fgetcsv.php)
8
+
9
+ [PHP:CSVファイルをSplFileObjectでオブジェクティブに読み込む - Qiita](https://qiita.com/PitPat/items/3a47f57c0d357bc36940)
10
+
11
+ などを読んで、処理の流れを確認すること。
12
+
13
+
14
+
15
+ CSVファイルが手元にないので再現できないけど、
16
+
17
+ こういうふうになるのでは?
18
+
19
+
20
+
21
+ ```php
22
+
23
+ $fp = new SplFileObject(__DIR__.'/data/excel.csv');
24
+
25
+ $fp->setFlags(SplFileObject::READ_CSV);
26
+
27
+
28
+
29
+ $table = array(); // 初期化
30
+
31
+ foreach ($fp as $line) {
32
+
33
+ if ($fp->key() > 0 && ! $fp->eof()) { // <- ここいらへんはよくわからんので放置
34
+
35
+ var_dump($line);
36
+
37
+ }
38
+
39
+ $table[] = $line; // $lineが1行分のCSVデータの配列
40
+
41
+ }
42
+
43
+
44
+
45
+ ?><table>
46
+
47
+ <?php
48
+
49
+ foreach ($table as $row) {
50
+
51
+ ?><tr>
52
+
53
+ <?php
54
+
55
+ foreach ($row as $col) {
56
+
57
+ ?><td><?php echo htmlspecialchars($col, ENT_COMPAT | ENT_HTML401, 'UTF-8');?></td>
58
+
59
+ <?php
60
+
61
+ }
62
+
63
+ ?></tr>
64
+
65
+ <?php
66
+
67
+ }
68
+
69
+ ```
70
+
71
+ とか。