先頭に持ってきたいキーの配列 + 元の配列 で出来る
$attributes = [
'name' => 'たろう',
'sex' => '男',
'age' => '24',
'id' => 12345
];
$attributes = ['id' => $attributes['id']] + $attributes;
// $attributes = [
// 'id' => 12345,
// 'name' => 'たろう',
// 'sex' => '男',
// 'age' => '24'
// ];
配列演算子では左側の配列の要素が優先される。
この特性のおかげで、先頭に持ってきたいキーの配列を左辺に置けばそれが先頭になる。
- 演算子は、右側の配列を左側の配列に追加したものを返します。 両方の配列に存在するキーについては左側の配列の要素が優先され、 右側の配列にあった同じキーの要素は無視されます。
かつ、PHPの配列は順序が保持されるので「+」で先頭にidを足しても他要素の順番は変わらない。
PHP の配列は、実際には順番付けられたマップです。
おまけ
これをやりたいと思ったのは、
LaravelのEloquentモデルでgetAttributes()
した際、PKのidが配列の最後に入っていたのを先頭にしたかったため。
具体的には、createしたレコードのデータを完了画面で順番通りに表示させたい!という場合。
DBによってはauto incrementのidがレコード挿入後に生成されるため、DBから結果が返される際に他のカラムより遅れてidの値が返されることがあるらしい。