回答編集履歴

1

Update

2022/03/20 17:06

投稿

melian
melian

スコア19840

test CHANGED
@@ -1,5 +1,33 @@
1
+ > 配列が動的に増えた場合にbbbbを先頭にもっていくにはどうしたらいいのでしょうか?
2
+
3
+ とりあえず、見様見真似で関数化してみました。
4
+
1
5
  ```php
2
6
  <?php
7
+
8
+ //
9
+ // unshift_with_key(array &$lst, string $key)
10
+ //
11
+ // Move the element to the front of the sequence, unchange order of rest
12
+ // elements in the sequence
13
+ //
14
+ // Parameters:
15
+ // $lst: associative array
16
+ // $key: key of a element to move to the front of $lst
17
+ //
18
+ // Returns: None
19
+ //
20
+ function unshift_with_key(&$lst, $key) {
21
+ $idx = array_search($key, array_keys($lst));
22
+ if ($idx === false || $idx === 0) {
23
+ return;
24
+ }
25
+ $order = range(0, count($lst)-1);
26
+ $order[$idx] = -1;
27
+ array_multisort($order, $lst);
28
+ return;
29
+ }
30
+
3
31
  $a='{
4
32
  "aaaa": {
5
33
  "list": {
@@ -10,9 +38,11 @@
10
38
  $a = json_decode($a, true);
11
39
 
12
40
  $l["data_list"] = $a;
13
- $l["data_list"]["bbbb"]["list"]["s"] = "a";
41
+ $l["data_list"]["bbbb"]["list"]["s"] = "b";
42
+ $l["data_list"]["cccc"]["list"]["s"] = "c";
14
43
 
44
+ $first_key = "bbbb";
15
- array_multisort([1, 0], $l["data_list"]);
45
+ unshift_with_key($l["data_list"], $first_key);
16
46
 
17
47
  $l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
18
48
  echo "<pre>".$l."</pre>";//確認用
@@ -22,13 +52,18 @@
22
52
  "data_list": {
23
53
  "bbbb": {
24
54
  "list": {
25
- "s": "a"
55
+ "s": "b"
26
56
  }
27
57
  },
28
58
  "aaaa": {
29
59
  "list": {
30
60
  "n": "a"
31
61
  }
62
+ },
63
+ "cccc": {
64
+ "list": {
65
+ "s": "c"
66
+ }
32
67
  }
33
68
  }
34
69
  }</pre>