# Movable TypeでMTLoopを使ってkeyでソートしたときに、10個以上表示させると並びがおかしくなる URL: https://webrandum.net/movable-type-mtloop-sort-key/ 公開日: 2023-01-20 更新日: 2023-01-20 カテゴリー: コーディング タグ: Movable Type 出典: Webrandum(著者: サイトウ マサカズ) Movable Typeで配列を作成して``を「`sort_by="key"`」でkey順にループしたいときがありました。 ``` <$MTCategoryLabel$>
``` しかしこれを実行すると、意図した並びになりませんでした。 表示する数が少ない場合は問題ありませんでしたが、10個以上になった場合に、下記のように1番目と2番目の間に10番目や11番目が割り込んできてしまいます。 - 1番目 - 10番目 - 11番目 - 12番目 - 13番目 - 2番目 - 3番目 - 4番目 - … 数字としての「10」ではなく「1と0」としか認識していないようです。 ## 解決方法:先頭に「0」をつける 仕方がないのでkeyが1桁の場合は先頭に「0」をつけるようにしました。 こうすれば「01、02、03…10、11」と正しく並んでくれます。 ``` <$MTCategoryLabel$>
``` 追加した処理は下記の部分です。 ``を使って1桁かどうかを確認して、1桁の場合は「`regex_replace`」で数字の先頭に「0」を追加したものを「keyCount」という変数に入れています。 ``` ``` もともと「count」変数をkeyに入れていたのですが、先頭に「0」追加が必要になったのでそれとは別に「keyCount」をつくってそれをkeyに入れるようにしています。 これで意図した順番になります。 - 01番目 - 02番目 - 03番目 - 04番目 - … - 10番目 - 11番目 - 12番目 - 13番目 ただループしているだけなのに、どうして順番がおかしくなるのか分からず「key」の番号を出力して確認してようやく気がつけました。 ### 100個以上表示させる場合は3桁にする必要がある とり急ぎ今回の対応をしましたが、これだと今度は100個以上表示させたときに並びがおかしくなってしまいます。 100個も表示させることはないと思いますが、表示させる可能性がある場合は3桁にする必要があります。