Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何按对象属性之一对其进行排序(而不是对数组排序)?_Php_Oop - Fatal编程技术网

Php 如何按对象属性之一对其进行排序(而不是对数组排序)?

Php 如何按对象属性之一对其进行排序(而不是对数组排序)?,php,oop,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_

所以我找到了大量关于排序数组和按对象属性排序对象数组的答案。但是如何通过排序重新排列对象中属性的顺序呢

我有一个物体是这样布置的:

$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

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

这里有一个指向我试图排序的实际对象的链接:

您可以试试

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

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

这已经足够让我找到解决办法了。必须将$a->pro更改为$a->优先级。此外,还必须编写一个intcmp()函数来计算整数,就像strcmp()计算字符串一样。现在它就像雨一样,是我的错。我忘了把它换回来。哈哈。如果你加上这个,那么你的答案将绝对是我问题的完美答案:公共函数intcmp($a,$b){If((int)$a==(int)$b)返回0;If((int)$a>(int)$b)返回1;If((int)$a<(int)$b)返回-1;}这已经足够接近我的答案了。必须将$a->pro更改为$a->优先级。此外,还必须编写一个intcmp()函数来计算整数,就像strcmp()计算字符串一样。现在它就像雨一样,是我的错。我忘了把它换回来。哈哈。如果你加上这个,那么你的答案绝对是我问题的完美答案:公共函数intcmp($a,$b){If((int)$a==(int)$b)返回0;If((int)$a>(int)$b)返回1;If((int)$a<(int)$b)返回-1;}