回答編集履歴

4

コード修正

2015/12/15 17:21

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -6,13 +6,9 @@
6
6
 
7
7
  { // 先頭から"#"までの文字列を切り出して、それを数値変換し比較する。数値化できない場合はゼロ
8
8
 
9
- $tmpa = substr($a,0,strpos($a,"#"));
9
+ $tmpa = intval(substr($a,0,strpos($a,"#")));
10
10
 
11
- $tmpa = is_numeric($tmpa) ? intval($tmpa) : 0;
12
-
13
- $tmpb = substr($b,0,strpos($b,"#"));
11
+ $tmpb = intval(substr($b,0,strpos($b,"#")));
14
-
15
- $tmpb = is_numeric($tmpb) ? intval($tmpb) : 0;
16
12
 
17
13
  return ($tmpa == $tmpb) ? 0 : ($tmpa < $tmpb) ? -1 : 1;
18
14
 

3

コード修正

2015/12/15 17:21

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  function cmp($a, $b)
6
6
 
7
- {
7
+ { // 先頭から"#"までの文字列を切り出して、それを数値変換し比較する。数値化できない場合はゼロ
8
8
 
9
9
  $tmpa = substr($a,0,strpos($a,"#"));
10
10
 

2

コード修正

2015/12/15 17:15

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -14,13 +14,7 @@
14
14
 
15
15
  $tmpb = is_numeric($tmpb) ? intval($tmpb) : 0;
16
16
 
17
- if ($tmpa == $tmpb) {
18
-
19
- return 0;
20
-
21
- }
22
-
23
- return ($tmpa < $tmpb) ? -1 : 1;
17
+ return ($tmpa == $tmpb) ? 0 : ($tmpa < $tmpb) ? -1 : 1;
24
18
 
25
19
  }
26
20
 

1

コード修正

2015/12/15 17:12

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -26,6 +26,46 @@
26
26
 
27
27
  usort($hoge, "cmp");
28
28
 
29
+ var_dump($hoge);
30
+
31
+ /*
32
+
33
+ array(7) {
34
+
35
+ [0]=>
36
+
37
+ string(15) "80#0#1000#100#0"
38
+
39
+ [1]=>
40
+
41
+ string(16) "100#0#2500#200#0"
42
+
43
+ [2]=>
44
+
45
+ string(16) "100#0#2500#200#0"
46
+
47
+ [3]=>
48
+
49
+ string(16) "100#0#2500#200#0"
50
+
51
+ [4]=>
52
+
53
+ string(16) "200#0#2500#200#0"
54
+
55
+ [5]=>
56
+
57
+ string(24) "200#300##10000#400##5000"
58
+
59
+ [6]=>
60
+
61
+ string(16) "200#0#2500#200#0"
62
+
63
+ }*/
64
+
29
65
  ```
30
66
 
31
67
  [usortリファレンス](http://php.net/manual/ja/function.usort.php)
68
+
69
+
70
+
71
+ ソート時と分類時の2回文字列の分析をするので無駄ではありますが……