如何通过其中一个属性(不排序数组)对对象属性进行排序?

时间:2018-03-03 01:53:41

标签: php oop

所以我发现了很多关于排序数组和按这些对象属性排序对象数组的答案。但是如何通过排序重新排列对象中属性的顺序。

我有一个像这样的对象:

$My_Object->tabs->tab_1->priority = 3;
$My_Object->tabs->tab_2->priority = 5;
$My_Object->tabs->tab_3->priority = 1;

我尝试了以下代码,没有任何影响。

public function sort_by_priority() {

    usort( $this->tabs , array( $this , 'compare' ) );

}

public function compare($a, $b) {
    return strcmp($a->priority, $b->priority);
}
在类上下文中调用

$ this-> sort_by_priority()。

但无论我尝试什么,对象属性总是按照它们被添加到对象的顺序。

它应按以下顺序返回:tab_3,tab_1,tab_2。

如何根据优先级属性对对象中属性的顺序进行排序?

以下是我尝试排序的实际对象的链接:https://gist.github.com/Nicholas-Cardot/d97cf6c88243fb9b2745a1d2edee19d3

1 个答案:

答案 0 :(得分:2)

你可以尝试一下。

public function sort_by_priority() {
    $tabs = new ArrayObject($this->tabs);
    $tabs->uasort(function($a, $b){
        return (int)$a->priority - (int)$b->priority ;
    });
}