回答編集履歴
1
Update
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"] = "
|
41
|
+
$l["data_list"]["bbbb"]["list"]["s"] = "b";
|
42
|
+
$l["data_list"]["cccc"]["list"]["s"] = "c";
|
14
43
|
|
44
|
+
$first_key = "bbbb";
|
15
|
-
|
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": "
|
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>
|