回答編集履歴
5
ソートのコードを実際のデータ型に合わせる
test
CHANGED
@@ -116,16 +116,31 @@
|
|
116
116
|
例えばこんな感じでいけませんでしょうか?
|
117
117
|
```php
|
118
118
|
<?php
|
119
|
+
$departments = [(object)[
|
120
|
+
'id' => 'A',
|
121
|
+
'name' => 'ANAME'
|
122
|
+
],(object)[
|
123
|
+
'id' => 'B',
|
124
|
+
'name' => 'BNAME',
|
125
|
+
],(object)[
|
126
|
+
'id' => 'C',
|
119
|
-
|
127
|
+
'name' => 'CNAME',
|
128
|
+
], (object)[
|
129
|
+
'id' => 'E',
|
130
|
+
'name' => 'ENAME',
|
131
|
+
]
|
132
|
+
, (object)[
|
133
|
+
'id' => 'D',
|
134
|
+
'name' => 'DNAME',
|
135
|
+
]];
|
120
136
|
$top = 'B';
|
121
|
-
usort($n
|
137
|
+
usort($departments, function($arg1, $arg2) use ($top) {
|
122
|
-
if ($arg1 == $top) return -1;
|
138
|
+
if ($arg1->id == $top) return -1;
|
123
|
-
if ($arg2 == $top) return 1;
|
139
|
+
if ($arg2->id == $top) return 1;
|
124
|
-
if ($arg1 == $arg2) return 0;
|
125
140
|
return 0;
|
126
141
|
});
|
127
142
|
|
128
|
-
echo var_export($n
|
143
|
+
echo var_export($departments, true);
|
129
144
|
```
|
130
145
|
|
131
|
-
[playground](https://php-play.dev/?c=DwfgDgFmBQAkB
|
146
|
+
[playground](https://php-play.dev/?c=DwfgDgFmBQAkAmBTMBDATgFwLaIHYYGcACAXiIG0AKAewCMArRAYwwEpzoiuiByAS3g9SAPl4BBHgBpO3HrhQ4hJUTzEA5MQFkAoj2gBdSTQbM2HbrwFKVAISkyuchYmu8bGnfcPHGLdg8tBEV4AYXsLJ0VgnhCPXWlDIh9TfwiraPiAyJcMuK9oSSS6XzMs9OVeABFw2Xkoip5KvIT9AG44DGowUjcedoBXAmpMSgRkdGw8QkKAM37cFj5qXFH0AHMARkLYdYAmViJBxCTYTrADgG8AvhmT9Y2AWmEBUjJTroO0RAx%2BtFwiB4bdoWG53NBrXZPF4kN5nT7fX7-IEBL4-P5EAAM7QAvqx2tBmBBqEQAG7oAD6iAAHmBhhhRkhUJgcPgCIUMGh%2Bog8dBoEA&v=8.4&f=console)
|
4
特定キーを上に上げるソート
test
CHANGED
@@ -108,3 +108,24 @@
|
|
108
108
|
```
|
109
109
|
|
110
110
|
以上。
|
111
|
+
|
112
|
+
# 追伸
|
113
|
+
|
114
|
+
## 配列の特定値だけ一番上にする方法
|
115
|
+
|
116
|
+
例えばこんな感じでいけませんでしょうか?
|
117
|
+
```php
|
118
|
+
<?php
|
119
|
+
$numArray = ['A', 'B', 'C', 'E', 'D'];
|
120
|
+
$top = 'B';
|
121
|
+
usort($numArray, function($arg1, $arg2) use ($top) {
|
122
|
+
if ($arg1 == $top) return -1;
|
123
|
+
if ($arg2 == $top) return 1;
|
124
|
+
if ($arg1 == $arg2) return 0;
|
125
|
+
return 0;
|
126
|
+
});
|
127
|
+
|
128
|
+
echo var_export($numArray, true);
|
129
|
+
```
|
130
|
+
|
131
|
+
[playground](https://php-play.dev/?c=DwfgDgFmBQAkB2BXAtgQQE7oIYE8AEAvHgNoDkqpANHqQEJU0DCDpAoiwCKkC6A3HABcA9mEI16-RAGch6AQAoEKDNhzUAZongBjAQEsh8RVnQBzAIzVYJ0wCYAlHmkBTPIuFhHAb2h4-ePXU3azNzQiJYD0d0ZwFEdHg8AFpzfn8AoOMzW3C8SJFo2PjE1N9-QOCbMIIImwc8GLiEvAAGNP9G4tb%2BAF97fmhnbQghPAA3EwB9ZwAPMFkFJTRMXGoBdERnfuhoIA&v=8.4&f=html)
|
3
微修正
test
CHANGED
@@ -29,6 +29,7 @@
|
|
29
29
|
# `laravelcollective/html`
|
30
30
|
|
31
31
|
もしも `laravelcollective/html` を使っているのでしたら、公式ドキュメントはこれでしょうか?
|
32
|
+
※ただし、 `laravelcollective/html` 自体は最新版は廃止扱いみたいですね。
|
32
33
|
|
33
34
|
> ### Drop-Down Lists
|
34
35
|
> Generating A Drop-Down List
|
@@ -89,8 +90,7 @@
|
|
89
90
|
> ```
|
90
91
|
>
|
91
92
|
> #### コレクションではダメな理由
|
92
|
-
> 第二引数に渡した配列の値が is_array() を条件として optgroup
|
93
|
+
> 第二引数に渡した配列の値が is_array() を条件として optgroup を作るかどうかを判定しているからです。
|
93
|
-
を作るかどうかを判定しているからです。
|
94
94
|
>
|
95
95
|
> ```php
|
96
96
|
> public function options($options)
|
@@ -106,4 +106,5 @@
|
|
106
106
|
```
|
107
107
|
{{ html()->select($name, $options) }}
|
108
108
|
```
|
109
|
+
|
109
|
-
|
110
|
+
以上。
|
2
spatie/laravel-html の追加
test
CHANGED
@@ -73,3 +73,37 @@
|
|
73
73
|
> ```
|
74
74
|
|
75
75
|
https://laravel.com/docs/11.x/blade#additional-attributes
|
76
|
+
|
77
|
+
# `spatie/laravel-html`
|
78
|
+
|
79
|
+
[laravel: laravelcollective/html から spatie/laravel-html に引っ越す](https://sibogli.hateblo.jp/entry/2023/10/20/211133#select-%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%94%E3%83%B3%E3%82%B0) に下記の記述がありました。
|
80
|
+
|
81
|
+
> ### select のグルーピング
|
82
|
+
> `laravelcollective/html` では `select()` へネストにしたコレクション`([string => Collection])`を渡せば勝手に `optgroup` を作ってくれましたが、
|
83
|
+
`spatie` はコレクションが渡されても `optgroup` にしてくれません。
|
84
|
+
>
|
85
|
+
> 結論から言えば、コレクションを配列に変換したものを第二引数に渡しましょう。
|
86
|
+
> ```
|
87
|
+
> {{ html()
|
88
|
+
> ->select('area_manager_id', $areaManagers->toArray()) }}
|
89
|
+
> ```
|
90
|
+
>
|
91
|
+
> #### コレクションではダメな理由
|
92
|
+
> 第二引数に渡した配列の値が is_array() を条件として optgroup
|
93
|
+
を作るかどうかを判定しているからです。
|
94
|
+
>
|
95
|
+
> ```php
|
96
|
+
> public function options($options)
|
97
|
+
> {
|
98
|
+
> return $this->addChildren($options, function ($text, $value) {
|
99
|
+
> if (is_array($text)) {
|
100
|
+
> return $this->optgroup($value, $text);
|
101
|
+
> }
|
102
|
+
> ```
|
103
|
+
|
104
|
+
とあり、次のパターンでいけると思われます。
|
105
|
+
|
106
|
+
```
|
107
|
+
{{ html()->select($name, $options) }}
|
108
|
+
```
|
109
|
+
```
|
1
blade template の例を追加 あと見出しの追加
test
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
公式ドキュメントを見た感じ、第二引数が options なのですが、何を元に無理と判断したのでしょうか?とても気になります。
|
1
|
+
公式ドキュメントを見た感じ、第二引数が options なのですが、何を元に無理と判断したのでしょうか?とても気になります。
|
2
|
+
(ただし、 Laravel 公式の Form 自体は 4.2 まで存在しており、11.x にはないです。
|
3
|
+
|
4
|
+
# Laravel 4.2
|
5
|
+
|
6
|
+
Laravel 4.2 の ドキュメントだと次の様にあります。
|
2
7
|
|
3
8
|
> ### Drop-Down Lists
|
4
9
|
> Generating A Drop-Down List
|
@@ -21,6 +26,7 @@
|
|
21
26
|
|
22
27
|
https://laravel.com/docs/4.2/html#drop-down-lists
|
23
28
|
|
29
|
+
# `laravelcollective/html`
|
24
30
|
|
25
31
|
もしも `laravelcollective/html` を使っているのでしたら、公式ドキュメントはこれでしょうか?
|
26
32
|
|
@@ -50,3 +56,20 @@
|
|
50
56
|
> ```
|
51
57
|
|
52
58
|
https://laravelcollective.com/docs/6.x/html#drop-down-lists
|
59
|
+
|
60
|
+
# blade template
|
61
|
+
|
62
|
+
また、単に select タグを blade template に書くのであれば Laravel に下記の記述があります。
|
63
|
+
|
64
|
+
> Likewise, the `@selected` directive may be used to indicate if a given select option should be "selected":
|
65
|
+
> ```php
|
66
|
+
> <select name="version">
|
67
|
+
> @foreach ($product->versions as $version)
|
68
|
+
> <option value="{{ $version }}" @selected(old('version') == $version)>
|
69
|
+
> {{ $version }}
|
70
|
+
> </option>
|
71
|
+
> @endforeach
|
72
|
+
> </select>
|
73
|
+
> ```
|
74
|
+
|
75
|
+
https://laravel.com/docs/11.x/blade#additional-attributes
|