Laravel5.4、コレクションの自然順ソート

タグ: Laravel5.4  

ツイートに返信した内容です。検索には引っかからないので、必要な方もいらっしゃるでしょうから、残しておきます。

collect(['012', '12', '11', '122', '1', '21'])->sort(function($str1, $str2) {return strnatcmp($str1, $str2);})->values();

実行結果は、["1","11","012","12","21","122"]になります。

逆順にしたければ、strnatcmpの返す値の正負を逆にします。

sort(function($str1, $str2) {return -strnatcmp($str1, $str2);})

コード的に負数にするためのハイフンを見落としやすいので、-1を掛けるほうが好みの人もいるでしょう。

もう、Laravelと言うよりもPHPの話になりますが、strnatcmpは大文字小文字を区別します。区別しない場合はstrnatcasecmp関数を使用します。