2013-05-09 69 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

相關問題