回答編集履歴

3

修正

2019/01/11 03:00

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1,11 +1,111 @@
1
- ~~rankとかあるいは文字で並べられるなら[array_multisort](https://secure.php.net/manual/ja/function.array-multisort.php)が第一候補ですが、ちょっと難しそうなんで、[usort](https://secure.php.net/manual/ja/function.usort.php)で自分で比較関数を書くしかないと思います。~~
1
+ ```php
2
2
 
3
- 読み違ってました。
3
+ <?php
4
4
 
5
+ $full = [];
6
+
7
+ $keys = ["team_id" => "team_list", "team_name" => "team_list", "rank" => "team_list", "tank" => "tank_list", "members" => "num_list"];
8
+
9
+ for($i = 0 ; $i <= 8 ; $i++ ) {
10
+
11
+ foreach($keys as $key => $value) {
12
+
13
+ $full[$i][$key] = $$value[$i][$key] ?? $$value[$i];
14
+
15
+ }
16
+
17
+ }
18
+
19
+ var_export($full);
20
+
5
- rankとteamidは数値なので、[array_multisort](https://secure.php.net/manual/ja/function.array-multisort.php)でソートできると思います。
21
+ array_multisort(array_column($full, "rank"), SORT_ASC,array_column($full, "team_id"), SORT_ASC,$full);
22
+
23
+ foreach($full as $row) {
24
+
25
+ echo implode(", ", $row).PHP_EOL;
26
+
27
+ }
28
+
29
+ var_export($full);
30
+
31
+ $tank_list = array_column($full, "tank");
32
+
33
+ $num_list = array_column($full, "members");
34
+
35
+ var_export($tank_list);
36
+
37
+ var_export($num_list);
6
38
 
7
39
 
8
40
 
9
- --
41
+ // datas
10
42
 
43
+ $team_list = Array(
44
+
45
+ 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ),
46
+
11
- 一旦、tanklistとnumlistをキー(配列のインデクス)で、マージした大きな配列を作って、array_multisortでソトして、array_columnでtank列とnum列を抜き出せばいいんじゃないかと思います。
47
+ 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチム', 'rank' => 3),
48
+
49
+ 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2),
50
+
51
+ 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 2),
52
+
53
+ 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 4),
54
+
55
+ 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3),
56
+
57
+ 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2),
58
+
59
+ 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4),
60
+
61
+ 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4),
62
+
63
+ );
64
+
65
+ $tank_list = Array (
66
+
67
+ 0 => 'IV号戦車D型',
68
+
69
+ 1 => 'ヘッツァー',
70
+
71
+ 2 => '八九式中戦車甲型',
72
+
73
+ 3 => 'III号突撃砲F型',
74
+
75
+ 4 => 'M3中戦車リー',
76
+
77
+ 5 => 'ルノーB1bis',
78
+
79
+ 6 => 'ポルシェティーガー',
80
+
81
+ 7 => '三式中戦車',
82
+
83
+ 8 => 'Mk.IV戦車',
84
+
85
+ );
86
+
87
+
88
+
89
+ $num_list = Array (
90
+
91
+ 0 => '5人',
92
+
93
+ 1 => '3人',
94
+
95
+ 2 => '4人',
96
+
97
+ 3 => '4人',
98
+
99
+ 4 => '6人',
100
+
101
+ 5 => '3人',
102
+
103
+ 6 => '4人',
104
+
105
+ 7 => '3人',
106
+
107
+ 8 => '5人',
108
+
109
+ );
110
+
111
+ ```

2

修正

2019/01/11 03:00

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -6,4 +6,6 @@
6
6
 
7
7
 
8
8
 
9
+ --
10
+
9
- こりの2つの配列ソートのやりたが分かりせん
11
+ 一旦、tanklistとnumlistをキー(配列インデクス)で、マージした大きな配列を作って、array_multisortでソートして、array_columnでtank列とnum列を抜き出せばいいんじゃないと思い

1

修正

2019/01/09 09:16

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1 +1,9 @@
1
- rankとかあるいは文字で並べられるなら[array_multisort](https://secure.php.net/manual/ja/function.array-multisort.php)が第一候補ですが、ちょっと難しそうなんで、[usort](https://secure.php.net/manual/ja/function.usort.php)で自分で比較関数を書くしかないと思います。
1
+ ~~rankとかあるいは文字で並べられるなら[array_multisort](https://secure.php.net/manual/ja/function.array-multisort.php)が第一候補ですが、ちょっと難しそうなんで、[usort](https://secure.php.net/manual/ja/function.usort.php)で自分で比較関数を書くしかないと思います。~~
2
+
3
+ 読み違ってました。
4
+
5
+ rankとteamidは数値なので、[array_multisort](https://secure.php.net/manual/ja/function.array-multisort.php)でソートできると思います。
6
+
7
+
8
+
9
+ のこりの2つの配列のソートのやりかたが分かりません。