2016-11-27 17 views
-1

私はすべての位置がオブジェクトである配列を持っています。各オブジェクトは「順序」プロパティを持ち、このプロパティで配列を並べ替える必要があります。配列クラスを注文する最も良い方法は何ですか?

どのような方法が最適ですか?

私は約array_multisortを見ましたが、ポジションはオブジェクトであり配列ではないため、これはうまく動作しません。

+0

あなたは私たちにあなたのアレイと必要なO/Pを表示できますか? – Tiger

答えて

0

あなたはそのようにそれを行うことができます。

<?php 
class OrderedItem 
{ 
    public $title; 
    public $order; 

    public function __construct($title, $order) 
    { 
     $this->title = $title; 
     $this->order = $order; 
    } 
} 

$items = [ 
    new OrderedItem('Title 1.2', 1), 
    new OrderedItem('Title 3', 3), 
    new OrderedItem('Title 4', 4), 
    new OrderedItem('Title 1.1', 1), 
    new OrderedItem('Title 2', 2), 
]; 

usort($items, function (OrderedItem $i1, OrderedItem $i2) { 
    return ($i1->order < $i2->order) ? -1 : 1; 
}); 

その結果、$items配列は次のようになります。

Array 
(
    [0] => OrderedItem Object 
     (
      [title] => Title 1.1 
      [order] => 1 
     ) 

    [1] => OrderedItem Object 
     (
      [title] => Title 1.2 
      [order] => 1 
     ) 

    [2] => OrderedItem Object 
     (
      [title] => Title 2 
      [order] => 2 
     ) 

    [3] => OrderedItem Object 
     (
      [title] => Title 3 
      [order] => 3 
     ) 

    [4] => OrderedItem Object 
     (
      [title] => Title 4 
      [order] => 4 
     ) 

) 

「注文」プロパティは、静的メソッドを作成することができますprivateであるあなたのケースでいる場合オブジェクトクラス内で 'order'プロパティを比較します。あなたはどのように公式の文書でそれを行う例を見つけることができます:http://php.net/manual/en/function.usort.php#example-5639

関連する問題