如果我有這樣的如何排序在PHP關聯數組,然後找到結果
$array = array();
$array['e01'] = '03/16/2012';
$array['e02'] = '03/14/2012';
$array['e05'] = '03/01/2014';
關聯數組我想數組按日期再通過結果循環排序得到索引的值,即e01,e02,e05。我需要該索引從對象中檢索信息。
如果我有這樣的如何排序在PHP關聯數組,然後找到結果
$array = array();
$array['e01'] = '03/16/2012';
$array['e02'] = '03/14/2012';
$array['e05'] = '03/01/2014';
關聯數組我想數組按日期再通過結果循環排序得到索引的值,即e01,e02,e05。我需要該索引從對象中檢索信息。
來自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";
}
使用array_keys函數。
嘗試uasort()
排序的數組:
function mysort($a, $b) {
return (strtotime($a) < strtotime($b)) ? -1 : 1;
}
uasort($array, 'mysort');
爲了得到鍵你可以只使用array_keys()
我認爲如果我將你對uasort()的建議與Stewart的回答結合起來,我會得到正確的解決方案。他的代碼做我想要的,並且實際上完成了排序。但我寧願添加strtotime函數。感謝您指出了這一點。 – user823527 2012-03-16 18:38:52
當排序的關聯數組,鍵和值更改訂單,但關鍵值協會將不變。因此,如果密鑰e01
的值爲03/16/2012
,即使在uasort
(這可能是您要查找的內容,請參閱Crashspeeder的答案)e01
仍將具有值03/16/2012
。如果你想改變值的順序,同時保持鍵的順序:
這對於他的日期格式無法正常工作。它是按字符串排序的。按字符串排序日期會導致大部分時間不正確的結果。 – Crashspeeder 2012-03-16 16:47:20
偉大的工作得很好。感謝您編寫完成所有事情的幾行代碼。但是,我會添加一個用戶排序函數來將字符串更改爲時間。 – user823527 2012-03-16 18:33:26
@Crashspeeder:以離域格式編寫處理日期/時間將允許您忽略這些問題,因爲離域從一般到特定:'2012/01/10 12:00:01'。年>月>天>時間>分鐘>秒> ... – 2012-03-16 19:33:15