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

回答編集履歴

1

調整

2018/08/28 02:16

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -1,1 +1,77 @@
1
- $arrの1次のキーが競合しているのでソートも何も上書きして1つかデータ無いですね
1
+ $arrの1次のキーが競合しているのでソートも何も上書きして1つかデータ無いですね
2
+
3
+ # sample
4
+ 私がちゃんと質問の主旨を理解しているか怪しいのですが
5
+ こんな感じで掘って処理するとよいかも。
6
+ 再帰処理をかけたほうが良いでしょうけどとりあえず今回は冗長に処理しています
7
+
8
+ ```PHP
9
+ function mysort(&$v,$mykey,$sortType){
10
+ uasort($v,function($x,$y) use($mykey,$sortType){
11
+ if(isset($x[$mykey]) and isset($y[$mykey])){
12
+ return intval($x[$mykey])>intval($y[$mykey])?-$sortType:$sortType;
13
+ }elseif(isset($x[$mykey])){
14
+ return -1;
15
+ }elseif(isset($y[$mykey])){
16
+ return 1;
17
+ }
18
+ return 1;
19
+ });
20
+ }
21
+ function sortArrayByKey2(&$arr,$mykey,$sortType=1){
22
+ if(is_array($arr)){
23
+ foreach($arr as &$v1){
24
+ if(is_array($v1)){
25
+ foreach($v1 as &$v2){
26
+ if(is_array($v2)){
27
+ mysort($v2,$mykey,$sortType);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ };
34
+ $arr = array(
35
+ '2018-01-25' => array(
36
+ '3' => array(
37
+ '111111' => array(
38
+ '回収予定日' => '2018-01-25',
39
+ '入金先' => '株式会社ダミー',
40
+ '入金予定額' => '1111111',
41
+ ),
42
+ '222222' => array(
43
+ '回収予定日' => '2018-01-05',
44
+ '入金先' => '株式会社テスト',
45
+ '入金予定額' => '2222222',
46
+ ),
47
+ '口座種類' => '共通',
48
+ '口座計' => '3333333',
49
+ ),
50
+ ),
51
+ '2018-02-25' => array(
52
+ '3' => array(
53
+ '444444' => array(
54
+ '回収予定日' => '2018-01-25',
55
+ '入金先' => '株式会社ダミー',
56
+ '入金予定額' => '4444444',
57
+ ),
58
+ '333333' => array(
59
+ '回収予定日' => '2018-01-05',
60
+ '入金先' => '株式会社テスト',
61
+ '入金予定額' => '3333333',
62
+ ),
63
+ '口座種類' => '共通',
64
+ '口座計' => '7777777',
65
+ )
66
+ ),
67
+ );
68
+ sortArrayByKey2($arr,'入金予定額', 1);
69
+ print_r($arr);
70
+ sortArrayByKey2($arr,'入金予定額', -1);
71
+ print_r($arr);
72
+
73
+ ```
74
+
75
+ ※数値として比較していますのでintvalしていますが、
76
+ 例えば入金先でソートする場合はintvalはまずいです
77
+ そのへんの折り合いをどうしたいかによって場合分けが増えると思います