2014-01-28 41 views
0

訂購我有具有時間戳一致的[3]格式化陣列由指定的Unix時間戳在PHP

我想陣列(下面的陣列數據的一個例子)使用進行排序的陣列時間戳。我已經看到了一些使用兩種方法顯示這種做法的stackoverflow帖子,array_multisort()usort(),但我一直無法複製。
以下是我根據我自己的代碼嘗試:

嘗試1 - 我通過數組usort,然後嘗試用在foreach把它拆開。應用此方法肯定會更改結果的順序,但日期似乎不是特定順序(升序,降序)。

function sortArray($a1, $a2){ 
    if ($a1[3] == $a2[3]) return 0; 
    return ($a1[3] > $a2[3]) ? -1 : 1; 
} 
usort($the_array, "sortArray"); 

foreach($the_array as $sh) { 
    $uid = $sh['uid']; 
    $username = $sh['username']; 
    $datetime = $sh['datetime']; 
    $type = $sh['type']; 

echo "<p> $uid , $username, $datetime, $type </p>"; 
} 

嘗試2 - 使用array_multisor()這又使我產生了不同的順序嘗試,但我不明白它是什麼恰好排序。

foreach ($the_array as $key => $node) { 
    $timestamps[$key] = $node[3]; 
} 
array_multisort($timestamps, SORT_ASC, $the_array); 
//process the array with a foreach to show results 

我的理論這裏是它不能正確處理Unix時間戳,我不知道我能做到這一點。取出時間戳的所有字符是否聰明,因此它是一個簡單的數字行(2014-01-02 03:02:12變成20140102030212)?還是有另一種方式來處理它與時間戳在它的當前形式?

這裏是陣列中的數據的例子:

Array 
(
    [0] => Array 
     (
      [uid] => 20013 
      [0] => 20013 
      [username] => myhipswontlie 
      [1] => myhipswontlie 
      [rating] => 4.00 
      [2] => 4.00 
      [datetime] => 2014-01-27 23:40:56 
      [3] => 2014-01-27 23:40:56 
      [type] => rated 
      [4] => rated 
     ) 

    [1] => Array 
     (
      [uid] => 20025 
      [0] => 20025 
      [username] => brasilchika 
      [1] => brasilchika 
      [rating] => 4.00 
      [2] => 4.00 
      [datetime] => 2014-01-02 03:02:12 
      [3] => 2014-01-02 03:02:12 
      [type] => rated 
      [4] => rated 
     ) 

    [2] => Array 
     (
      [uid] => 10002 
      [0] => 10002 
      [username] => crtten 
      [1] => crtten 
      [datetime] => 2014-01-25 01:33:34 
      [2] => 2014-01-25 01:33:34 
      [type] => visits 
      [3] => visits 
     ) 

) 

回答

1

你的問題是,你的數字鍵似乎並不在你的陣列相匹配。有時日期時間在第三個鍵中找到,有時在第二個鍵中找到(這很奇怪,因爲他們看起來像是來自mysql_fetch_array(),這將使統一陣列)。

爲了解決這個問題,你應該使用關聯數組鍵來代替:

function sortArray($a1, $a2){ 
    if ($a1['datetime'] == $a2['datetime']) return 0; 
    return ($a1['datetime'] > $a2['datetime']) ? -1 : 1; 
} 
usort($the_array, "sortArray"); 
+0

啊我甚至沒有注意到這是對我的切換。我現在意識到發生了什麼事情,其中​​一些結果的評分正在改變關鍵。非常感謝你。 – Jared