teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

修正追記

2017/07/25 08:06

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -37,3 +37,10 @@
37
37
  var_dump($csv);
38
38
  ```
39
39
 
40
+ もし削除したい列が1つとかであればforeachしなくても指定列番を普通に削除するように記述すると良いです。
41
+ ```PHP
42
+ while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
43
+ unset($data[8]); //例示のデータだと日付部分
44
+ $csv[] = $data;
45
+ }
46
+ ```

5

修正

2017/07/25 08:06

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -18,7 +18,8 @@
18
18
  }
19
19
  ```
20
20
 
21
- ** 質問に追加を受けての追記
21
+ 質問に追加を受けての追記
22
+ ---
22
23
 
23
24
  全てのレコードで同じ列を削除したい場合はこんな感じに書くと良いです。
24
25
 

4

追記

2017/07/25 08:03

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -17,3 +17,22 @@
17
17
  $csv[] = $data;
18
18
  }
19
19
  ```
20
+
21
+ ** 質問に追加を受けての追記
22
+
23
+ 全てのレコードで同じ列を削除したい場合はこんな感じに書くと良いです。
24
+
25
+ ```PHP
26
+ //削除したい列を定義
27
+ $delete_column = array(4,8,5);
28
+ //レコードの左端を0番目としてカウントしていって削除したい列番を列挙する
29
+
30
+ while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
31
+ foreach($delete_column as $col_num){
32
+ unset($data[$col_num]);
33
+ }
34
+ $csv[] = $data;
35
+ }
36
+ var_dump($csv);
37
+ ```
38
+

3

修正

2017/07/25 08:02

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,15 +1,17 @@
1
1
  提示の通りに入っているとしたら「女」がある行は2行目なので
2
+ ```PHP
2
3
  unset($csv[0]);
3
- ではなく
4
+
4
5
  unset($csv[1]);
6
+ ```
5
7
  ですね。
6
8
 
7
9
  直後に削除する前提のデータを含む配列変数を作るというのは冗長な感じがしますし、一瞬とはいえ無駄なメモリを使っていることになります。
8
10
  いっそのことwhileの中で「女」を含んでいる行を読み飛ばすようにした方が良いのかなと思います。
9
11
 
10
12
  補足:
11
- 0から始まる連番の配列を作る際は連番用の変数を作らなくても```配列名[]```とすることで0から連番にしてくれます。
13
+ 0から始まる連番の配列を作る際は連番用の変数を作らなくても```配列名[]```に情報を入れていくと0から連番にしてくれます。
12
- 下記のようにすることで変数「$key」も不要となるので、コードがよりすっきりしますよ。
14
+ 変数「$key」も不要となるので、コードがよりすっきりしますよ。
13
15
  ```PHP
14
16
  while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
15
17
  $csv[] = $data;

2

修正

2017/07/25 06:09

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -5,4 +5,13 @@
5
5
  ですね。
6
6
 
7
7
  直後に削除する前提のデータを含む配列変数を作るというのは冗長な感じがしますし、一瞬とはいえ無駄なメモリを使っていることになります。
8
- いっそのことwhileの中で「女」を含んでいる行を読み飛ばすようにした方が良いのかなと思います。
8
+ いっそのことwhileの中で「女」を含んでいる行を読み飛ばすようにした方が良いのかなと思います。
9
+
10
+ 補足:
11
+ 0から始まる連番の配列を作る際は連番用の変数を作らなくても```配列名[]```とすることで0から連番にしてくれます。
12
+ 下記のようにすることで変数「$key」も不要となるので、コードがよりすっきりしますよ。
13
+ ```PHP
14
+ while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
15
+ $csv[] = $data;
16
+ }
17
+ ```

1

修正

2017/07/25 06:06

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -4,5 +4,5 @@
4
4
  unset($csv[1]);
5
5
  ですね。
6
6
 
7
- 配列変数を作ってから削除というのは冗長な感じがしますし、一瞬とはいえ無駄なメモリを使っていることになります。
7
+ 直後に削除する前提のデータを含む配列変数を作というのは冗長な感じがしますし、一瞬とはいえ無駄なメモリを使っていることになります。
8
8
  いっそのことwhileの中で「女」を含んでいる行を読み飛ばすようにした方が良いのかなと思います。