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

回答編集履歴

2

無名関数追加

2019/12/18 03:37

投稿

takepan1973
takepan1973

スコア821

answer CHANGED
@@ -74,4 +74,39 @@
74
74
  }
75
75
 
76
76
  $x = new Some();
77
+ ```
78
+
79
+ 無名関数にすれば煩わしくないか、と思ったりした。
80
+ (ソースはアレになりますが)
81
+
82
+ - 無名関数版
83
+
84
+ ```
85
+ <?php
86
+
87
+ $data = [
88
+ 'a1' => [
89
+ 'name' => 'zulu',
90
+ 'age' => 24,
91
+ 'hobby' => 'train',
92
+ ],
93
+ 'a2' => [
94
+ 'name' => 'amemiya',
95
+ 'age' => 28,
96
+ 'hobby' => 'gourmet',
97
+ ],
98
+ 'a3' => [
99
+ 'name' => 'sato',
100
+ 'age' => 26,
101
+ 'hobby' => 'radio',
102
+ ],
103
+ ];
104
+ usort($data, function($a, $b) {
105
+ if ($a['name'] === $b['name']) {
106
+ return $a['hobby'] > $b['hobby'];
107
+ } else {
108
+ return $a['name'] > $b['name'];
109
+ }
110
+ });
111
+ var_dump($data);
77
112
  ```

1

クラス対応版を追加

2019/12/18 03:36

投稿

takepan1973
takepan1973

スコア821

answer CHANGED
@@ -31,4 +31,47 @@
31
31
  return $a['name'] > $b['name'];
32
32
  }
33
33
  }
34
+ ```
35
+
36
+ - クラス対応版
37
+
38
+ ```
39
+ <?php
40
+ class Some {
41
+ function __construct() {
42
+ $this->solve();
43
+ }
44
+
45
+ function solve() {
46
+ $data = [
47
+ 'a1' => [
48
+ 'name' => 'sato',
49
+ 'age' => 24,
50
+ 'hobby' => 'train',
51
+ ],
52
+ 'a2' => [
53
+ 'name' => 'amemiya',
54
+ 'age' => 28,
55
+ 'hobby' => 'gourmet',
56
+ ],
57
+ 'a3' => [
58
+ 'name' => 'sato',
59
+ 'age' => 26,
60
+ 'hobby' => 'radio',
61
+ ],
62
+ ];
63
+ usort($data, 'self::cond');
64
+ var_dump($data);
65
+ }
66
+
67
+ static function cond($a, $b) {
68
+ if ($a['name'] === $b['name']) {
69
+ return $a['hobby'] > $b['hobby'];
70
+ } else {
71
+ return $a['name'] > $b['name'];
72
+ }
73
+ }
74
+ }
75
+
76
+ $x = new Some();
34
77
  ```