@duong-lt

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPカスタマイズソート順

Q&A

Closed

したいこと

$arr = ['1L','3L','L2','L1','2L','L3','LL'];

以下のようなソート順して欲しい!!

$arr = ['L1','L2','L3','LL','3L','2L','1L'];

いい案がある方いらっさいましたら、教えてくださいますよう宜しくお願い致します。

0 likes

2Answer

データや条件が曖昧なので予想して考えてみます。

まずデータが「英字(A-Z)と数字(1-9)の2文字」と考えます。
例)19, 91, 1A, Z9, AZ, ZA

条件は次のようなものと考えます。
比較対象をA、Bとして、

  • AとBが同じ場合は同順
  • AとBの1文字目が異なる場合
    • どちらも数字なら降順(3L < 1L)
    • どちらも英字なら昇順(A3 < L3)
    • 英字と数字なら、英字優先(L3 < 3L)
  • AとBの1文字目が同じで、2文字目が異なる場合
    • どちらも数字なら昇順(L1 < L3
    • どちらも英字なら降順(2L < 2A
    • 英字と数字なら、数字優先(A3 < AL

この条件で示されている例のようにソートできたので、あとはusortでこれらの条件を書いていくだけになります。
(文字の分解や数字判定、英字判定は割愛します)

2Like

Comments

  1. @duong-lt

    Questioner

    ご返信ありがとうございます。

    いけそうな気がします。とりあえず、やってみます。
    大変助かりました。

それだけではソートの条件が分かりません。他の値が入ることはありますか?

0Like

Comments

  1. @duong-lt

    Questioner

    うまく説明できなくて、申し訳ございません。
    他の値が入ることもありますが、ソート条件としては

    ASC(「字・数」,「字・字」) + DESC(「数・字」,「数・数」)
    みたいな感じとなります。
  2. 数・数があるということは、1つの「数」は0〜9の数字1桁である(つまり ['123'] などはあり得ない)と考えていいですかね?字も同様ですか?大文字小文字が混ざることは?
  3. @duong-lt

    Questioner

    ご返信ありがとうございます。

    おっしゃっている通りです。3桁の数のケースがございません、1つの「数」がある場合0埋めているのです。
    字の場合は大文字→小文字の順となり、1桁の「字」ケースがございませんが、2桁以上の「字」ケースがありそうです(※恐らく)。

Your answer might help someone💌