概要
- インデックス配列を、sortBy() すると、順番が入れ替わる場合に連想配列になります。
- 順序が入れ替わらない場合は、インデックス配列のままです。
- APIなどで配列をJSONなどに出力すると結果によって、フォーマットが崩れてしまうケースがあるので注意が必要です。
- 意識してインデックス配列にする場合は、 values() メソッドを利用し配列の番号を振り直し、インデックス配列に強制します。
sample.php
$array = [
[
'name' => 'ryoma',
'age' => 33,
],
[
'name' => 'taro',
'age' => 22,
],
];
// 変更なし配列そのまま
echo json_encode($array);
// [{"name":"ryoma","age":33},{"name":"taro","age":22}]
// sortBy で前後関係が入れ替わらないケース (インデックス配列)
echo json_encode(collect($array)->sortBy('name'));
// [{"name":"ryoma","age":33},{"name":"taro","age":22}]
// sortBy で前後関係が入れ替わるケース (連想配列になる)
echo json_encode(collect($array)->sortBy('age'));
// {"1":{"name":"taro","age":22},"0":{"name":"ryoma","age":33}}
// 連想配列になるケースをvalues() で 整数を振り直して、インデックス配列に強制
echo json_encode(collect($array)->sortBy('age')->values());
// [{"name":"taro","age":22},{"name":"ryoma","age":33}]
まとめ
- sortBy() 使って インデックス配列で返却して欲しいときは、values()を使いましょう
- \(^o^)/