2013-05-09 35 views
1

我有这样如何通过在PHP中的东西排序数组?

阵列的数据([0] => stdClass的对象([ID] => 1 [标题] => AAAA [句子] => ABCDEFGH [秩] => 3)[ 1] => stdClass Object([id] => 2 [title] => BBBB [sentence] => ijklmn [rank] => 1)[3] => stdClass Object([id] => 3 [title] = > CCC [sentence] => opqrstu [rank] => 2));

显示的数据:

foreach($data as $d) 
{ 
    $title = $d->title; 
    $sentence = $d->sentence; 
    $rank = $d->rank; 
    echo $title. " | " .$sentence. " | " .$rank. "<br>"; 
} 

如何通过 '等级' 排序呢?感谢您的帮助。

+2

其**对象数组**!不仅仅是一些东西。答案是在生产代码中使用[** usort **](http://php.net/manual/en/function.usort.php) – 2013-05-09 12:59:21

回答

0

您可以使用PHP的usort与使用对象的属性rank作为标准的函数:

function rank_compare($a, $b) { 
    return $a->rank - $b->rank; 
} 

usort($data, 'rank_compare'); 

更多信息:http://www.php.net/manual/en/function.usort.php

+0

与'返回strcmp($ a-> rank,$ b-> rank);',我可以解决这个问题,谢谢你的帮助。 (http://stackoverflow.com/questions/4282413/php-sort-array-of-objects-by-object-fields) – bob 2013-05-09 14:22:02

+0

不客气@bob!一旦你的'rank'实际上是一个数字,我认为一个数字运营商会更合适。 – 2013-05-09 14:31:01

-1

这是你的课程bubble sorting派上用场。你自己写一个方便的小排序算法,它接受一个数组作为参数,返回一个有序的东西数组......这只是一个for循环。外环从0到阵列的长度。内部循环从0到数组的长度减去外部循环。对于内部循环,将当前值与下一个值进行比较 - 如果当前值是“更大”,则将其鼓泡起来。在第一次通过外部循环后,最大值位于顶部。第二次通过后,第二大排名第二。等

+0

Bubblesort?!?!?! – Jon 2013-05-09 12:58:55

+0

嘿,如果他不知道怎么做,他必须从某个地方开始。无可否认,我宁愿保持排序和索引在第一位... – 2013-05-09 13:02:30

+0

我同意。而那个地方是内置函数'sort'的手册页。 – Jon 2013-05-09 13:04:39

0

使用PHP的usort功能

usort($array, function($a, $b){ 
    if ($a->rank == $b->rank) return 0; 
    return ($a->rank > $b->rank)?1:-1; 
}); 

usort取阵列和一个比较功能,比较功能应该返回0,如果两个参数是在排序方面相等,1,如果第一个参数是大于第二个参数,如果第一个参数小于第二个参数,则为-1。

+1

只是稍微澄清一点:回调不需要返回1或-1,只有一个大于或小于0的整数。这意味着你可以在这种情况下(比较字段是一个整数)简化回调到'function($ a,$ b){return $ a-> rank - $ b-> rank;}' – IMSoP 2013-05-09 13:14:46

+0

@ IMSop优雅...我必须记住, – Orangepill 2013-05-09 14:39:52

相关问题