2012-11-28 152 views
3

我的數組的排序值爲1-6。雙排序陣列

Array: 2 5 6 2 5 1 1 

然後我可以在任何其他情況下得到這兩個的第一個例子。

所以它會像2 2 5 6 5 1 1。但是,那麼我需要按其他排序值和日期排序。

例如:2 2 1 1 5 5 6那些也有附加的日期,需要按降序排序。

最後一個例子:

2 - 2012-06-02 
2 - 2012-06-01 
1 - 2012-03-05 
1 - 2012-03-01 
5 - 2012-08-09 
5 - 2012-01-01 
6 - 2012-11-29 

我的功能看起來像這樣的時刻,並且使用的usort功能。 ObjektTyp是排序值,不同的數字取決於它是什麼類型的房屋。所有這些值都來自XML源。

function sort_by_type(&$array, $sort = NULL) 
{ 
    usort($array, function($a, $b) use ($sort) 
    { 
     if ($a["ObjektTyp"] == $sort) { 
      return -1; 
     } else { 
      return 1; 
     } 
    }); 
} 

我很想得到一些幫助,這,已經拉我的頭髮一整天。

非常感謝!

+1

而不是使用'?',使用'if' /'else'。像'if($ a [「ObjektTyp」] == $ sort){return -1; } else {//按其他內容排序}' –

+0

在你的例子中,日期是*升序,而不是降序。 – cmbuckley

+0

謝謝@RocketHazmat的格式和「如果」 - 提示。 謝謝cbuckley我只是將其改爲降序。 – Andreas

回答

0

首先按數字排序,然後按日期排序。這可以通過檢查數字是否相同,然後按日期排序來完成。

事情是這樣的:

function sort_by_type(&$array, $sort = NULL){ 
    usort($array, function($a, $b) use ($sort){ 
     if($a["ObjektTyp"] == $b["ObjektTyp"]){ 
      // already sorted by number, sort by date 
      return strtotime($b['date']) - strtotime($a['date']); // sort descending 
     } 
     else{ 
      // sort by number 
      if ($a["ObjektTyp"] == $sort) { 
       return -1; // 2s to the top 
      } 
      elseif($b["ObjektTyp"] == $sort){ 
       return 1; // 2s to the top 
      } 
      else { 
       return $a["ObjektTyp"] - $b["ObjektTyp"]; 
      } 
     } 
    }); 
} 

DEMO:http://codepad.viper-7.com/3PMtmA

+0

這真是太神奇了!非常感謝你! – Andreas

+0

不客氣:-) –