2016-11-27 4 views
-1

У меня есть массив, где все позиции являются объектами. Каждый объект имеет свойство «order», и я хочу заказать массив этим свойством.Каков наилучший способ заказать классы массивов?

Каков наилучший способ?

Я видел около array_multisort, но это не работает Я думаю, потому что позиции - это объекты, а не массивы.

+0

Вы можете показать нам свой массив и то, что вам нужно? – 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

Смежные вопросы