在PHP中使用usort排序对象的数组?
题
我没有看usort,但还是有点迷茫......
下面是$ myObject的对象是什么样的:
Array
(
[0] => stdClass Object
(
[tid] => 13
[vid] => 4
)
[1] => stdClass Object
(
[tid] => 10
[vid] => 4
)
[2] => stdClass Object
(
[tid] => 34
[vid] => 4
)
[3] => stdClass Object
(
[tid] => 9
[vid] => 4
)
我看到这一点:
function cmp( $a, $b )
{
if( $a->weight == $b->weight ){ return 0 ; }
return ($a->weight < $b->weight) ? -1 : 1;
}
usort($myobject,'cmp');
我试图按照TID进行排序,但是,我想我只是不知道真要是我必须要改变重的东西?还是会只是工作的是什么?我试了一下,但没有输出...
解决方案
CMP是一个回调函数usort用来复杂的对象比较(像你),以找出如何对它们进行排序。修改CMP供您使用(或者其重命名为您所希望的任何)
function cmp( $a, $b )
{
if( $a->tid == $b->tid ){ return 0 ; }
return ($a->tid < $b->tid) ? -1 : 1;
}
usort($myobject,'cmp');
function sort_by_tid( $a, $b )
{
if( $a->tid == $b->tid ){ return 0 ; }
return ($a->tid < $b->tid) ? -1 : 1;
}
usort($myobject,'sort_by_tid');
其他提示
我一直想写一个比较函数了三个小时。事实上,这是很容易的,但我想我失去了一些东西,从头改变算法一次又一次地写了它在许多方面与我的样品阵列测试它。
最后,我意识到问题是在内部uasort功能。它没有完成所有项目的比较。我不记得使用的算法的名称,但现在我自己用C使用的改进版本(OW矿)++。该算法通过将阵列分成如在递归调用与新索引(以下,上限)每次分选功能所需的尽可能多的对使用二进制树等比较方法。
当剩余的片是一个项目,则上部和下部索引相同和功能认为它已经完成(处理的所有项),尽管最后一个项目未评价。当最内部块具有奇数个使用算法排序功能失效。它工作正常,2,4,8个....元素,但不能工作,3,5,7等等故障的确切条件取决于元素进行排序顺序。数字可能并不总是有意义的。
我这个问题几年前解决。我不能用自己的PHP现在解决这个问题,因为我没有一个PHP编译器和我没有PHP源代码,无论是。但是,如果从PHP开发团队接触我任何人,我可以在C提供该算法的工作副本++。相同的算法是访问排序元素最快的方法。
有关获取属性stdClass的对象使用的操作 - > { 'name_property'},例如$一 - > { 'TID'}
function cmp( $a, $b )
{
if( $a->{'tid'} == $b->{'tid'} ){ return 0 ; }
return ($a->{'tid'} < $b->{'tid'}) ? -1 : 1;
}
usort($myobject,'cmp');
function sort_by_tid( $a, $b )
{
if( $a->{'tid'} == $b->{'tid'} ){ return 0 ; }
return ($a->{'tid'} < $b->{'tid'}) ? -1 : 1;
}
usort($myobject,'sort_by_tid');
不隶属于 StackOverflow