質問編集履歴
2
typo
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 =
|
43
|
+
$row1Time = $row1[2]; $row2Time = $row2[2];
|
44
44
|
|
45
45
|
if($row1Rank == $row2Rank) { // 空白や同一文字が連続した時
|
46
46
|
//return 0;
|
1
必要なコードに絞って修正。これでもなお、丸投げだとおっしゃるのであれば、どの部分が丸投げなのか、何の情報を追加すれば良いのか、具体的にコメントをお願いします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,18 +24,11 @@
|
|
24
24
|
|
25
25
|
# 現在の実装
|
26
26
|
|
27
|
-
|
27
|
+
現在のループ中の通過順位($row1Rank)と次のループの通過順位($row2Rank)が同一、
|
28
|
+
または異なる時、通過タイムで比較して、数字の小さいほうを上に表示したいのですが、
|
29
|
+
どのように実装すれば良いかがわかりません
|
30
|
+
|
28
|
-
|
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
|
-
|
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
|
[
|