LoginSignup
2
2

More than 3 years have passed since last update.

LaravelのCollectionのsortBy()メソッドを使うときの注意点

Posted at

概要

  • インデックス配列を、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^)/
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2