LoginSignup
8
1

[Laravel]文字と数字が混在する場合のsort

Posted at

はじめに

こんにちは!

2024年新卒で無事エンジニアデビューしたものです。

私は私立の文系大学を卒業後、現在、株式会社ダイアログに入社し、エンジニアチームに配属されました。

自社では1ヶ月の全職種研修を終え、さらに1ヶ月のエンジニア研修を終えたのち案件にアサインされる形となっております。

そこで今回は私が初めてアサインしていただいた案件でつまづいた箇所を記載できればと思っております。

案件内容

衣類を扱う会社の帳票の改修

文字と数字が混在している場合のサイズ名の昇順

衣類を扱う中で色々なサイズ表記があります。
S・M・Lのような文字表記の場合もあれば70・100・115のような数字表記の場合、また3Lのような数字と文字の混在している表記の場合もあります。

この場合、昇順をつける上では文字列または数列のどちらかに表記を合わせる必要があります。

文字を数字に置き換える

例えば
サイズ表記の種類がsz_nm = [SS,S,M,L,XL,4L,90,100,120]あったとします。
・今回は[SS,S,M,L,XL,4L,90,100,120]という並び順で出力されるようにしたいのですが
 現在の状態のまま文字列でsortをすると各文字の先頭の数字を先に見てしまうため、
 出力結果は[100,120,4L,90,L,M,S,SS,XL]となってしまいます。
 これでは想定通りの出力とならないため、
 条件分岐(CASE式)を使用して、SS~4Lの文字列を数値に変換します。

記載するコードは以下のようになります。

([\DB::raw('CASE sz_nm 
                      WHEN "SS" THEN 1
                      WHEN "S" THEN 2
                      WHEN "M" THEN 3
                      WHEN "L" THEN 4
                      WHEN "XL" THEN 5
                      WHEN "4L" THEN 6
                      ELSE sz_nm
                      END AS sz_nm_sort
                      ')]);

※sz_nmはサイズ名というカラム。(90,100,120はそもそもが数字列なのでelseの中に入っている。)

ここでは英語表記のサイズ名をDB上で全て数字に一旦置き換え、サイズの昇順をつけることが可能となります。

昇順に順番を変更する

また、この後の処理に数字列のsortを使用して並び替えると綺麗に並び替えることができます。

$hogehoge = $val['〇〇']->sort(function(Collection $d1, Collection $d2) {
?: $d1->get("sz_nm_sort") <=> $d2->get("sz_nm_sort")
)};

以上が文字と数字が混在している場合のサイズ名の昇順変更の流れになります。

最後に

今回の案件がエンジニアとして人生初案件でした。
プログラミング自体何も触れたことがない私に、優しくご教授いただきました先輩方には改めて
感謝申し上げます。
これからも精進して参ります。

8
1
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
8
1