2012-03-16 129 views
0
的字符串索引

如果我有這樣的如何排序在PHP關聯數組,然後找到結果

$array = array(); 
$array['e01'] = '03/16/2012'; 
$array['e02'] = '03/14/2012'; 
$array['e05'] = '03/01/2014'; 

關聯數組我想數組按日期再通過結果循環排序得到索引的值,即e01,e02,e05。我需要該索引從對象中檢索信息。

回答

0

來自PHP documentation on asort()。這將按值排序並讓您訪問每個索引的鍵和值:

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); 
asort($fruits); 
foreach ($fruits as $key => $val) { 
    echo "$key = $val\n"; 
} 
+0

這對於他的日期格式無法正常工作。它是按字符串排序的。按字符串排序日期會導致大部分時間不正確的結果。 – Crashspeeder 2012-03-16 16:47:20

+0

偉大的工作得很好。感謝您編寫完成所有事情的幾行代碼。但是,我會添加一個用戶排序函數來將字符串更改爲時間。 – user823527 2012-03-16 18:33:26

+1

@Crashspeeder:以離域格式編寫處理日期/時間將允許您忽略這些問題,因爲離域從一般到特定:'2012/01/10 12:00:01'。年>月>天>時間>分鐘>秒> ... – 2012-03-16 19:33:15

1

嘗試uasort()排序的數組:

function mysort($a, $b) { 
    return (strtotime($a) < strtotime($b)) ? -1 : 1; 
} 

uasort($array, 'mysort'); 

爲了得到鍵你可以只使用array_keys()

+0

我認爲如果我將你對uasort()的建議與Stewart的回答結合起來,我會得到正確的解決方案。他的代碼做我想要的,並且實際上完成了排序。但我寧願添加strtotime函數。感謝您指出了這一點。 – user823527 2012-03-16 18:38:52

1

當排序的關聯數組,鍵和值更改訂單,但關鍵值協會將不變。因此,如果密鑰e01的值爲03/16/2012,即使在uasort(這可能是您要查找的內容,請參閱Crashspeeder的答案)e01仍將具有值03/16/2012。如果你想改變值的順序,同時保持鍵的順序:

  • 使用array_keys領取鑰匙
  • 使用usort(無需uasort,因爲我們沒有保留的當前順序鍵)按日期對值進行排序
  • 使用array_combine使用鍵和值創建一個新數組。