並べ替えの細かなルールがわかりませんが
- id順に検索して、最初に見つかったレコードを取り出す
- 上記で取り出せなかった残りのレコードを最後に付け足し直す
といった内容であれば、下記のコードで可能かと思います。
php
1$data = [
2 ['id' => 1],
3 ['id' => 1],
4 ['id' => 2],
5 ['id' => 3],
6 ['id' => 3],
7 ['id' => 4],
8 ['id' => 5],
9 ['id' => 5],
10 ['id' => 6],
11 ['id' => 6],
12 ['id' => 7],
13 ['id' => 8],
14 ['id' => 8],
15];
16
17$collection = collect($data);
18$min = $collection->min('id');
19$max = $collection->max('id');
20
21$first_records = [];
22for ($i=$min; $i<=$max; $i++) {
23 foreach ($data as $k => $v) {
24 if ($v['id'] === $i) {
25 $first_records[] = $v;
26 unset($data[$k]);
27 break;
28 }
29 }
30}
31$data = array_merge($first_records, $data);
32
33var_export($data);
34
35/*
36array (
37 0 =>
38 array (
39 'id' => 1,
40 ),
41 1 =>
42 array (
43 'id' => 2,
44 ),
45 2 =>
46 array (
47 'id' => 3,
48 ),
49 3 =>
50 array (
51 'id' => 4,
52 ),
53 4 =>
54 array (
55 'id' => 5,
56 ),
57 5 =>
58 array (
59 'id' => 6,
60 ),
61 6 =>
62 array (
63 'id' => 7,
64 ),
65 7 =>
66 array (
67 'id' => 8,
68 ),
69 8 =>
70 array (
71 'id' => 1,
72 ),
73 9 =>
74 array (
75 'id' => 3,
76 ),
77 10 =>
78 array (
79 'id' => 5,
80 ),
81 11 =>
82 array (
83 'id' => 6,
84 ),
85 12 =>
86 array (
87 'id' => 8,
88 ),
89)
90*/
91
ただ、このようなロジックが必要になっているという事は、おそらくデータ構成に問題があるので見直した方が良いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/18 03:49