質問編集履歴

2

typo

2022/10/06 01:46

投稿

qwe001
qwe001

スコア133

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
  function compare($row1, $row2)
41
41
  {
42
42
  $row1Rank = $row1[0]; $row2Rank = $row2[0];
43
- $row1Time = (int) $row2[0]; $row2Time = (int) $row2[2];
43
+ $row1Time = $row1[2]; $row2Time = $row2[2];
44
44
 
45
45
  if($row1Rank == $row2Rank) { // 空白や同一文字が連続した時
46
46
  //return 0;

1

必要なコードに絞って修正。これでもなお、丸投げだとおっしゃるのであれば、どの部分が丸投げなのか、何の情報を追加すれば良いのか、具体的にコメントをお願いします。

2022/10/06 01:40

投稿

qwe001
qwe001

スコア133

test CHANGED
File without changes
test CHANGED
@@ -24,18 +24,11 @@
24
24
 
25
25
  # 現在の実装
26
26
 
27
- ```php:./get_ranking.php
27
+ 現在のループ中の通過順位($row1Rank)と次のループの通過順位($row2Rank)が同一、
28
+ または異なる時、通過タイムで比較して、数字の小さいほうを上に表示したいのですが、
29
+ どのように実装すれば良いかがわかりません
30
+
28
- <?php
31
+ ```php
29
-
30
- //define('CSV', __DIR__ . '/data/record.csv');
31
- define('CSV', __DIR__ . '/data/test.csv');
32
-
33
- // CSVの列インデックス番号
34
- define('CSV_INDEX', [
35
- //[通過順位, 名前, 通過タイム, 区間順位, 区間タイム]
36
- [0, 1, 2, 3, 4],
37
- ]);
38
-
39
32
  /**
40
33
  * 値の大小比較を行う
41
34
  * 空文字は一番下にする
@@ -74,63 +67,12 @@
74
67
  return $row1Rank <=> $row2Rank;
75
68
  }
76
69
 
77
- try {
78
- $csv = new SplFileObject(CSV);
79
- $csv->setFlags(SplFileObject::READ_CSV);
80
- $csv->setCsvControl(',', '"');
81
- $data = [];
82
-
83
- // csv header
84
- $row = $csv->fgetcsv();
85
-
86
- while(!$csv->eof()) {
87
-
88
- $row = $csv->fgetcsv();
89
-
90
- foreach (CSV_INDEX as $division => $indexes) {
91
-
92
- $record = [];
93
-
94
- foreach ($indexes as $idx => $index) {
95
- $value = $row[$index];
96
- if (isset($value)) {
97
- $record[] = mb_convert_encoding($value, 'UTF-8', 'sjis-win');
98
- }
99
- }
100
-
101
- if (!empty($record)) {
102
- $data[$division][] = $record;
103
- }
104
- }
105
-
106
- }
107
-
108
-
109
- // sort
110
- $sort_by_rank = $data;
111
- foreach ($data as $division => $records) {
112
- $arr = $sort_by_rank[$division];
113
- //array_multisort(array_column($sort_by_rank[$division], 0), $sort_by_rank[$division]);
114
- usort($sort_by_rank[$division], "compare");
70
+ usort($arr, "compare");
115
- }
116
-
117
- $index = isset($_GET['index']) ? (int)$_GET['index'] : 0;
118
- $response = $sort_by_rank[$index];
119
- }
120
- catch (Exception $e) {
121
- $response = $data;
122
- }
123
-
124
- header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
125
- header('Last-Modified: '.gmdate( 'D, d M Y H:i:s' ).' GMT');
126
- header('Cache-Control: no-store, no-cache, must-revalidate');
127
- header('Cache-Control: post-check=0, pre-check=0', FALSE);
128
- header('Pragma: no-cache');
129
- header('Content-Type: application/json; charset=utf-8');
130
- echo json_encode($response);
131
71
  ```
132
72
 
133
73
  # 現在の並び順表示
74
+
75
+ 1(aaa)->2(bbb)->3(ccc)->4(ddd)->(xxx)->(vvv)->(yyy)->(zzz) の順で並びます。
134
76
 
135
77
  ```json
136
78
  [
@@ -194,6 +136,9 @@
194
136
  ```
195
137
 
196
138
  # 理想の並び順表示
139
+
140
+ 1(aaa)->2(bbb)->3(ccc)->4(ddd)->(vvv)->(xxx)->(yyy)->(zzz) の順で並んでほしいです
141
+ 順位順かつ、タイム順で並ばせたいです
197
142
 
198
143
  ```json
199
144
  [