2017-08-01 3 views
1

注文に基づいて$アイテムタイプを並べ替えるにはどうすればよいですか?これは私が現在持っているものです。配列の順序を使用してこのコレクションをソートするにはどうすればよいですか?

$order = ['AA', 'zl', 'Dr', 'co', 'og']; 

$items->sort(
    function ($a, $b) use ($order) { 
     return strcmp($b->type, $a->type) // how do I apply the order here? 
      ?: strcmp($b->date, $a->date); 
    } 
); 

は、基本的にはタイプ別に、それ最初の種類の2つの列の並べ替えだと、日付でソートします。型は、典型的なアルファベット順ではなく配列順を使用してソートされます。

答えて

2

各アイテムのタイプに対応する$orderのキーを比較できます。

return ($order[$b->type] - $order[$a->type]) 
      ?: strcmp($b->date, $a->date); 

あなたの項目のすべてが$orderに含まれているタイプを持っている場合、これは動作するはずです。そうでなければ、あなたは並べ替えを混乱させる未定義のインデックスエラーを得るでしょう。しかし、そのような項目をあなたの質問でどのようにソートするべきかを指定していないので、私は彼らがすべてそうしていると仮定しています。

+0

ああ、あなたは辞書を使いました。それはうまくいくはずです。 – rotaercz

+0

完全に動作します。ありがとうございます – rotaercz

+0

ようこそ。 –

関連する問題