回答編集履歴

1

調整

2018/08/28 02:16

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -1 +1,153 @@
1
1
  $arrの1次のキーが競合しているのでソートも何も上書きして1つかデータ無いですね
2
+
3
+
4
+
5
+ # sample
6
+
7
+ 私がちゃんと質問の主旨を理解しているか怪しいのですが
8
+
9
+ こんな感じで掘って処理するとよいかも。
10
+
11
+ 再帰処理をかけたほうが良いでしょうけどとりあえず今回は冗長に処理しています
12
+
13
+
14
+
15
+ ```PHP
16
+
17
+ function mysort(&$v,$mykey,$sortType){
18
+
19
+ uasort($v,function($x,$y) use($mykey,$sortType){
20
+
21
+ if(isset($x[$mykey]) and isset($y[$mykey])){
22
+
23
+ return intval($x[$mykey])>intval($y[$mykey])?-$sortType:$sortType;
24
+
25
+ }elseif(isset($x[$mykey])){
26
+
27
+ return -1;
28
+
29
+ }elseif(isset($y[$mykey])){
30
+
31
+ return 1;
32
+
33
+ }
34
+
35
+ return 1;
36
+
37
+ });
38
+
39
+ }
40
+
41
+ function sortArrayByKey2(&$arr,$mykey,$sortType=1){
42
+
43
+ if(is_array($arr)){
44
+
45
+ foreach($arr as &$v1){
46
+
47
+ if(is_array($v1)){
48
+
49
+ foreach($v1 as &$v2){
50
+
51
+ if(is_array($v2)){
52
+
53
+ mysort($v2,$mykey,$sortType);
54
+
55
+ }
56
+
57
+ }
58
+
59
+ }
60
+
61
+ }
62
+
63
+ }
64
+
65
+ };
66
+
67
+ $arr = array(
68
+
69
+ '2018-01-25' => array(
70
+
71
+ '3' => array(
72
+
73
+ '111111' => array(
74
+
75
+ '回収予定日' => '2018-01-25',
76
+
77
+ '入金先' => '株式会社ダミー',
78
+
79
+ '入金予定額' => '1111111',
80
+
81
+ ),
82
+
83
+ '222222' => array(
84
+
85
+ '回収予定日' => '2018-01-05',
86
+
87
+ '入金先' => '株式会社テスト',
88
+
89
+ '入金予定額' => '2222222',
90
+
91
+ ),
92
+
93
+ '口座種類' => '共通',
94
+
95
+ '口座計' => '3333333',
96
+
97
+ ),
98
+
99
+ ),
100
+
101
+ '2018-02-25' => array(
102
+
103
+ '3' => array(
104
+
105
+ '444444' => array(
106
+
107
+ '回収予定日' => '2018-01-25',
108
+
109
+ '入金先' => '株式会社ダミー',
110
+
111
+ '入金予定額' => '4444444',
112
+
113
+ ),
114
+
115
+ '333333' => array(
116
+
117
+ '回収予定日' => '2018-01-05',
118
+
119
+ '入金先' => '株式会社テスト',
120
+
121
+ '入金予定額' => '3333333',
122
+
123
+ ),
124
+
125
+ '口座種類' => '共通',
126
+
127
+ '口座計' => '7777777',
128
+
129
+ )
130
+
131
+ ),
132
+
133
+ );
134
+
135
+ sortArrayByKey2($arr,'入金予定額', 1);
136
+
137
+ print_r($arr);
138
+
139
+ sortArrayByKey2($arr,'入金予定額', -1);
140
+
141
+ print_r($arr);
142
+
143
+
144
+
145
+ ```
146
+
147
+
148
+
149
+ ※数値として比較していますのでintvalしていますが、
150
+
151
+ 例えば入金先でソートする場合はintvalはまずいです
152
+
153
+ そのへんの折り合いをどうしたいかによって場合分けが増えると思います