2010-08-24 34 views
2

我找去,從處理此陣:最快的方式使用PHP

array($ID => array (name => $name, created => $timestamp)) 

[5632][name] = martin 
[5632][created] = 131232342 
[6742][name] = paul 
[6742][created] = 131232312 
[6321][name] = peter 
[6321][created] = 131232311 

由創作像

[0] = 6321 
[1] = 6742 
[2] = 5632 

下令一組ID是什麼是在PHP中實現這種最快的方法嗎?

+0

數據源不允許排序嗎? – Gordon 2010-08-24 17:00:40

+0

它的確如此,但是由於查詢的複雜性,我將數據存儲在用戶會話中,當他們登錄到我的應用程序時。 – Pablo 2010-08-24 17:55:56

回答

3
function sort_by_date($a, $b) 
{ 
    if ($a['created'] == $b['created']) return 0; 
    return ($a['created'] < $b['created']) ? -1 : 1; 
} 

$array = array(...); 
uasort($array, "sort_by_date"); 
$ids = array_keys($array); 

uasort,您可以通過使用自定義功能,同時保持鍵數組排序。 array_keys返回一個包含另一個數組的鍵的數組。

+0

這會更快 function sort_by_date($ a,$ b) { return strnatcmp($ a ['created'],$ b ['created']); } – Pablo 2010-08-24 16:52:00

+0

你可以對它進行基準測試,但我的猜測是'strnatcmp'會更慢(特別是如果你創建的密鑰已經是數字) – 2010-08-24 17:05:32

+0

你是對的。你的腳本在7秒內在我的服務器上管理了100萬次迭代,其中strnatcmp佔用了大約9個。 – Pablo 2010-08-24 17:53:36

0
$new_array = krsort(array_keys($your_array)); 
+1

-1(1)這不起作用(2)不應該將函數的結果傳遞給'ksort()'(3) 'ksort()'返回一個布爾值 – NullUserException 2010-08-24 16:40:05

1

爲什麼要經過排序整個數組數組的努力,當你只想要ID?

$times = array(); 
foreach ($array as $key => $item) { 
    $times[$key] = $item['created']; 
} 
asort($times); 
$ids = array_keys($times);