2013-04-27 103 views
-1

我想按值位置(只能是1或0),日期和時間排列多維數組。位置= 1的數組應該是第一個,它們應該按日期和時間排序。與位置的陣列= 0應附帶位置= 1的那些之後,應該也按日期和時間PHP按3個值對多維數組進行排序

Array 
(
[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

那我想如何陣列是排序後進行分類:

Array 
(
[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

我已經嘗試了一些功能,但沒有任何的工作權利。無論是位置= 1的數組是最後一個還是所有數組只是按日期和時間排序。我無法自己弄清楚。 如果我的英語不好,請提前致謝並對不起。

+2

有數以百計的這種變化在這麼問,和所有的解決方案涉及使用usort'的'。告訴我們你的嘗試。 – Jon 2013-04-27 22:02:57

回答

1

當原始數據集是在一個名爲$array數組...

$positions = $datetimes = array(); 

foreach($array as $k => $v) { 

    $positions[$k] = $v['position']; 
    $datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']); 

} 

array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array); 

基於比較數據,它看起來你想先按位置DESC排序,然後是時間(並假定日期也是這樣)DESC,這就是它的作用。

工作例如:http://codepad.org/exc5Dhq8

+0

謝謝!它工作得很好:) – Kable 2013-04-27 22:28:00

+0

+1使用array_multisort。乍一看,我完全不明白你在做什麼。閱讀完文檔後,現在已經很清楚了。我今天學到了東西 – 2013-04-27 22:35:39

1

看看函數usort(),它將一個數組和一個比較函數作爲參數。

寫comparaison功能,可以比較兩個的數組元素:

  • 比較位置

  • 如果位置相等,則比較日期

  • 如果日期是相等的,那麼比較時間

1

使用usort() - 「之類的使用用戶自定義的比較函數值的數組」

function your_func($a, $b) { 
    $pos = $b["position"] - $a["position"]; 
    if($pos) return $pos; 

    $date = strtotime($b["Date"]) - strtotime($a["Date"]); 
    if($date) return $date; 

    $time = strtotime($b["Time"]) - strtotime($a["Time"]); 
    return $time; 
} 
usort($arr, "your_func"); 
+1

位置= 1的數組應該是第一個。使用您的方法,您將在排序時首先得到0。 (來自doc:如果第一個參數分別小於,等於或大於第二個參數,則比較函數必須返回小於,等於或大於零的整數)。你應該返回 - $ pos。日期和時間也是如此,從例證中我們要求降序。 – 2013-04-27 22:20:03

+0

你對..剛剛編輯! – vlcekmi3 2013-04-27 22:38:22

相關問題