2011-06-21 66 views
0

我有一個包含ORDER(整數)UUID和MODIFIED(時間戳)的PHP數組(從MYSQL調用)。數組按ORDER升序排序,然後按MODIFIED排序。基於時間戳和訂單的PHP重新排序陣列

例如:

$resource['Resource']['id']; 
$resource['Resource']['order']; 
$resource['Resource']['modified']; 

爲了測試這些我使用下面的循環:

foreach ($resources as $resource): 
    echo '<tr><td>' . $resource['Resource']['id'] . '</td>'; 
    echo '<td>' . $resource['Resource']['order'] . '</td>'; 
    echo '<td>' . $resource['Resource']['modified'] . '</td></tr>'; 
endforeach; 

有時,當特定的操作被執行,該命令可成爲重複。例如:

4dff97be-b0c4-45ac-a568-12f2cdbabb55,400,15時10分35秒2011-06-21

4e01006a-d46c-4f83-8c78-0eb1cdbabb55,400,2011-06-21 15:15:42

當發生這種情況時,我需要一個函數來遍歷數據,直到它找到兩個重複項(當然是相互相鄰的(因爲ORDER/MODIFIED排序的數組見上) 。當它找到兩個我需要它看到哪一個是最近的時候,將它加1,然後遍歷數組中剩餘的記錄遞增,直到不再有重複。 10這是比我習慣的更高級的編程,真的,真的需要一些幫助。任何時候任何人都可以放棄它會被感激地接受。

+2

好像你需要usort(http://php.net/manual/en/function.usort .PHP)。您只需編寫適當的比較函數 - 查看註釋中的示例。 – Zyava

回答

0

這隻需要一個循環。所以這將是O(n)操作。

這個問題很簡單。所以不要流汗。這將適用於你可能有很多重複。

​​
+0

''$ temp = getArrayFirstElement($ resource)' - >'$ temp = reset($ resource)' - 不要自己編寫和reset()一樣的函數。 – hakre

+0

@hakre k,我重新閱讀您的評論。你是對的。我將對代碼進行適當的更新。 – FinalForm

+0

對,誤解了,我的錯。這更像是'list($ temp)= array_values($ resource);' – hakre

0

要做你想做的事情,最簡單的事情就是把數組的所有元素放到不同的數組中。第二個數組將按順序鍵入。否則,它將包含標識,(如果您想輕鬆地重新使用子數組,則需要訂購),修改日期和計數。

由於要遍歷原始數組,請檢查第二個數組中是否存在使用isset()的訂單。如果已設置,則比較日期並更新,如果當前更新並增加計數。如果它不存在,只是設置,使數= 1

例子:

$new_array (
    400 => (
     id => 'blah', 
     order => 400, 
     modified => 'new date', 
     count => 2, 
    ), 
    401 => (
     id => 'blah2', 
     order => 401, 
     modified => 'date', 
     count => 1, 
    ), 
)