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

回答編集履歴

2

ちょうせい

2019/11/07 01:40

投稿

yambejp
yambejp

スコア117923

answer CHANGED
@@ -25,4 +25,11 @@
25
25
  });
26
26
  ```
27
27
  結局戻り値はプラスかマイナス(0も含め)しかみてないので、
28
- 比較するのが数値であれば引き算すれば事足りるわけです。
28
+ 比較するのが数値であれば引き算すれば事足りるわけです。
29
+
30
+ # post_ids順
31
+ ```PHP
32
+ usort($post_datas,function($x,$y) use($post_ids){
33
+ return array_search($x[$x["post_type"]."_id"],$post_ids)-array_search($y[$y["post_type"]."_id"],$post_ids);
34
+ });
35
+ ```

1

ちょうせい

2019/11/07 01:40

投稿

yambejp
yambejp

スコア117923

answer CHANGED
@@ -2,4 +2,27 @@
2
2
  usort($post_datas,function($x,$y){
3
3
  return $x[$x["post_type"]."_id"]-$y[$y["post_type"]."_id"];
4
4
  });
5
- ```
5
+ ```
6
+
7
+ # usortの仕組み
8
+ > マイナス「-」の意味
9
+
10
+ $xの○○○_id要素と$yの○○○_id要素の大きさを比べて
11
+ $xが大きければ$x[○○○]-$y[○○○]はプラスになり、小さければマイナスになります。
12
+ usortは2値をくらべてマイナスなら前に、プラスなら後にソートする処理です
13
+ ちゃんと書くならこんな感じです
14
+ ```PHP
15
+ usort($post_datas,function($x,$y){
16
+ $ret=1;
17
+ if($x[$x["post_type"]."_id"]<$y[$y["post_type"]."_id"]) $ret=-1;
18
+ return $ret;
19
+ });
20
+ ```
21
+ 三項演算でかくとちょっと見やすくなります
22
+ ```PHP
23
+ usort($post_datas,function($x,$y){
24
+ return $x[$x["post_type"]."_id"]<$y[$y["post_type"]."_id"])?-1:1;
25
+ });
26
+ ```
27
+ 結局戻り値はプラスかマイナス(0も含め)しかみてないので、
28
+ 比較するのが数値であれば引き算すれば事足りるわけです。