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

質問編集履歴

9

疑問の修正

2017/07/28 00:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,10 @@
1
1
  ###前提・実現したいこと
2
2
  csvをDLしようとする際、必ず出力されるCSVの1行目を除く他すべての1列目が空になってしまいます。
3
3
  具体的には、1列目に入るべき値が2列目に入ってしまっています。
4
+ また、一部こちらが望んだ並び順ではない並び順が出力されます。
5
+ CSVに出力されるものの並び順を確認するためにはどこをみればよいのでしょうか?
4
6
 
5
- この問題を解決するためにご助力いただけないでしょうか。
7
+ れらの問題を解決するためにご助力いただけないでしょうか。
6
8
 
7
9
  何卒よろしくお願いいたします。
8
10
 

8

タイトルの修正

2017/07/28 00:13

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 【laravel】csvに出力する際に、必ず1列目で空欄入っしまう
1
+ 【laravel】csvに出力する際に、出力される値の位置ズレいるものがある
body CHANGED
File without changes

7

「追記」を修正いたしました。

2017/07/27 08:03

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -73,8 +73,10 @@
73
73
  2 => "B'"
74
74
  3 => "C'"
75
75
  4 => "D'"
76
- 5 => "E'"
76
+ 5 => "F'"
77
- 6 => "F'"
77
+ 6 => "G'"
78
+
79
+ ※一部合致している箇所と、合致していない箇所がある状況にあります。
78
80
  ```
79
81
 
80
82
 

6

情報の修正②

2017/07/27 07:34

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -6,17 +6,7 @@
6
6
 
7
7
  何卒よろしくお願いいたします。
8
8
 
9
- ###発生している問題・エラーメッセージ
10
-
11
- ```
12
- 1 => array:2 [▼
13
- 0 => null
14
- 1 => "〇〇"
15
- ]
16
- ```
17
-
18
9
  ###該当のソースコード
19
- dd($value)
20
10
  ```php
21
11
  list ($titles, $value) = $this->titlesValue($type, $ids, $items);
22
12
  do {

5

依然として不明なため、情報の追加

2017/07/27 07:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -42,12 +42,52 @@
42
42
  return $this->download($type, $ids, $items);
43
43
  }
44
44
  ```
45
+
46
+ ###追記
47
+ CSVの中身を確認しましたら、(1行目を除く)全ての1列目に入れるもののみ、全ての2列目に入っておりました。
48
+ その原因は、1列目と2列目のそれぞれのセルに該当する値を挿入するための指標であるvalueが同じ値であったためだと考えております。
45
49
  ```php
46
- public function titlesValuess($type, $ids, $items) {
50
+ public function titlesValuess($type, $ids, $items) {
51
+ $info = $this->info()[$type];
52
+ $komoji = substr($type, 0, 1);
47
- return [$titles, $value];
53
+ $titles = [];
54
+ $data = [];
55
+ if (request()->input($komoji.'item')) {
56
+ $input = array_unique(array_map('intval',(array)request()->input($komoji.'item')));
57
+ foreach ($items as $i => $item) {
58
+ if (in_array($item['id'], $input, true)) {
59
+ $titles[] = $item['name'];
60
+ $item['index'] = count($titles) - 1;
61
+ $data['item'][$item['id']] = $item;
48
- }
62
+ }
63
+ }
64
+ }
65
+ if (!$titles) return [$titles, []];
66
+ $valuess = array_fill_keys($ids, array_fill(0, count($titles), null));
67
+ return [$titles, $valuess];
68
+ }
49
69
  ```
70
+ ```
71
+ titlesValuessの$titlesにdd
72
+ array:5 [▼
73
+ 0 => "A"
74
+ 1 => "B"
75
+ 2 => "C"
76
+ 3 => "D"
77
+ 4 => "E"
78
+ 5 => "F"
50
79
 
80
+ titlesValuessの$valuessにdd
81
+ 0 => null
82
+ 1 => "A'"
83
+ 2 => "B'"
84
+ 3 => "C'"
85
+ 4 => "D'"
86
+ 5 => "E'"
87
+ 6 => "F'"
88
+ ```
89
+
90
+
51
91
  ###試したこと
52
92
  listのあるところで「dd($value);」をかけてみたところ、上記の配列が結果として出てきました。
53
93
  また、「dd($titles);」ではCSVに出力される最初の行にあたる項目名が出力されます。

4

誤解を招く文章を修正

2017/07/27 07:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ###前提・実現したいこと
2
- csvをDLしようとする際、必ず出力されるCSVの第一行目が空になってしまいます。
2
+ csvをDLしようとする際、必ず出力されるCSVの1行目を除く他すべての1列目が空になってしまいます。
3
3
  具体的には、1列目に入るべき値が2列目に入ってしまっています。
4
4
 
5
5
  この問題を解決するためにご助力いただけないでしょうか。

3

修正

2017/07/26 06:02

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -16,6 +16,7 @@
16
16
  ```
17
17
 
18
18
  ###該当のソースコード
19
+ dd($value)
19
20
  ```php
20
21
  list ($titles, $value) = $this->titlesValue($type, $ids, $items);
21
22
  do {
@@ -33,7 +34,7 @@
33
34
  $file = (string)request()->input('file');
34
35
  return response()->download($csvPath, ($file!==''?$file:'export').'.csv')->deleteFileAfterSend(true);
35
36
  ```
36
- ```
37
+ ```php
37
38
  public function main($type) {
38
39
  $komoji = substr($type, 0, 1);
39
40
  $ids = $this->ids($type);
@@ -41,14 +42,15 @@
41
42
  return $this->download($type, $ids, $items);
42
43
  }
43
44
  ```
44
- ```
45
+ ```php
45
46
  public function titlesValuess($type, $ids, $items) {
46
- return [$titles, $valuess];
47
+ return [$titles, $value];
47
48
  }
48
49
  ```
49
50
 
50
51
  ###試したこと
51
52
  listのあるところで「dd($value);」をかけてみたところ、上記の配列が結果として出てきました。
53
+ また、「dd($titles);」ではCSVに出力される最初の行にあたる項目名が出力されます。
52
54
 
53
55
  ###補足情報(言語/FW/ツール等のバージョンなど)
54
56
  laravel 5.1

2

修正

2017/07/26 03:57

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
  do {
22
22
  $csv = storage_path().'/tmp/'.md5(uniqid(mt_rand(), true)).'.tmp';
23
23
  } while (file_exists($csvPath));
24
- $buf = fopen($csvPath, 'w');
24
+ $buf = fopen($csv, 'w');
25
25
  fwrite($buf, "\xEF\xBB\xBF");
26
26
  fputcsv($buf, $titles);
27
27
  foreach ($ids as $id) {
@@ -29,11 +29,26 @@
29
29
  fputcsv($buf, $valuess[$id]);
30
30
  }
31
31
  }
32
- fclose($buf);
32
+ fclose($buf);
33
+ $file = (string)request()->input('file');
34
+ return response()->download($csvPath, ($file!==''?$file:'export').'.csv')->deleteFileAfterSend(true);
33
35
  ```
36
+ ```
37
+ public function main($type) {
38
+ $komoji = substr($type, 0, 1);
39
+ $ids = $this->ids($type);
40
+ $items = array_map(function($c){return $c->toArray();}, call_user_func('\\App\\Models\\'.strtoupper($komoji).'item::uses'));
41
+ return $this->download($type, $ids, $items);
42
+ }
43
+ ```
44
+ ```
45
+ public function titlesValuess($type, $ids, $items) {
46
+ return [$titles, $valuess];
47
+ }
48
+ ```
34
49
 
35
50
  ###試したこと
36
- listのあるところで「dd($value);」をかけてみたとこえ¥
51
+ listのあるところで「dd($value);」をかけてみたところ、上記の配列が結果として出てきました。
37
52
 
38
53
  ###補足情報(言語/FW/ツール等のバージョンなど)
39
54
  laravel 5.1

1

更新

2017/07/26 03:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  この問題を解決するためにご助力いただけないでしょうか。
6
6
 
7
- よろしくお願いいたします。
7
+ 何卒よろしくお願いいたします。
8
8
 
9
9
  ###発生している問題・エラーメッセージ
10
10